策略模式:定義一系列的算法,并將每個算法封裝起來,可以使他們相互替換,讓算法獨立于使用它的客戶而獨立變化。
策略模式幾個組成組件:
1.Context:算法調用者,使用setStrategy方法靈活的選擇策略(strategy);
2.Strategy:算法的統(tǒng)一接口;
3.ConcreteStrategy: 算法的具體實現(xiàn)

策略模式.png
示例:在不同商家買蘋果
Strategy:算法接口
public interface BuyApple {
void buyApple();
}
ConcreteStrategy:算法具體實現(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:算法調用者
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();
}
策略模式的使用場景:
針對同一類型的問題有多種處理方式,僅僅在具體實現(xiàn)上有不同的方式;
出現(xiàn)同一抽象類有多個子類,而又需要使用 if-else 或者 switch-case 來選擇具體子類時。