策略模式主要是用來封裝一組能夠互相替代的算法族,而且能夠根據須要動態地去替換 Context 使用的算法。java
通俗的講,策略模式就是經過面向接口編程後生出的不少策略類,而後根據上下文選擇策略類進行調用。實現比較容易。算法
只要有一堆if else if else ...就能夠用策略模式替換。編程
若是算法實現裏又有條件語句,就構成了多重條件語句,能夠用策略模式,避免這樣的多重條件語句。bash
**注意事項:**若是一個系統的策略多於四個,就須要考慮使用混合模式,解決策略類膨脹的問題。架構
擴展性更好,面向接口編程。符合開閉原則和里氏替換原則。ide
一個策略接口,裏面聲明瞭策略的行爲。測試
public interface Strategy {
int handler(int a, int b);
}
複製代碼
策略: 加法. 實現了Strategy接口,按照功能重寫它的方法。ui
public class AddHandler implements Strategy{
@Override
public int handler(int a, int b) {
return a+b;
}
}
複製代碼
策略:減法this
public class SubtractHandler implements Strategy{
@Override
public int handler(int a, int b) {
return a-b;
}
}
複製代碼
策略上上下文,有了這部分,客戶能夠經過與它進行交互就能夠了。使策略模式更加完整,使客戶端更加簡單。spa
public class StrategyContext {
private Strategy strategy;
StrategyContext(Strategy strategy){
this.strategy = strategy;
}
public int execute(int a, int b){
return strategy.handler(a, b);
}
}
複製代碼
測試方法。
public class Main {
public static void main(String[] args) {
StrategyContext strategyContext = new StrategyContext(new AddHandler());
System.out.println(strategyContext.execute(5, 5));
StrategyContext strategyContext1 = new StrategyContext(new SubtractHandler());
System.out.println(strategyContext1.execute(9,6 ));
}
}
複製代碼
若是你喜歡個人文章,那麻煩請關注個人公衆號,公衆號重點分析架構師技術,該公衆號還處於初始階段,謝謝你們的支持。
關注公衆號,回覆java架構
獲取架構視頻資源(後期還會分享不一樣的優質資源噢)。