策略模式:定義一系列的算法闺阱,并將每個(gè)算法封裝起來焚辅,可以使他們相互替換己儒,讓算法獨(dú)立于使用它的客戶而獨(dú)立變化淑玫。
策略模式幾個(gè)組成組件:
1.Context:算法調(diào)用者巾腕,使用setStrategy方法靈活的選擇策略(strategy);
2.Strategy:算法的統(tǒng)一接口絮蒿;
3.ConcreteStrategy: 算法的具體實(shí)現(xiàn)
策略模式.png
示例:在不同商家買蘋果
Strategy:算法接口
public interface BuyApple {
void buyApple();
}
ConcreteStrategy:算法具體實(shí)現(xiàn)
public class Merchant1 implements BuyApple{
@Override
public void buyApple() {
System.out.println("商家1買蘋果");
}
}
public class Merchant2 implements BuyApple {
@Override
public void buyApple() {
System.out.println("商家2買蘋果");
}
}
Context:算法調(diào)用者
public class Buyer {
BuyApple buyApple;
public void setBuyApple(BuyApple buyApple){
this.buyApple = buyApple;
}
public void merchantSelection(){
buyApple.buyApple();
}
public static void main(String[] args) {
Buyer buyer = new Buyer();
buyer.setBuyApple(new Merchant1());
buyer.merchantSelection();
}
策略模式的使用場景:
針對(duì)同一類型的問題有多種處理方式尊搬,僅僅在具體實(shí)現(xiàn)上有不同的方式;
出現(xiàn)同一抽象類有多個(gè)子類土涝,而又需要使用 if-else 或者 switch-case 來選擇具體子類時(shí)佛寿。