策略模式主要是用來封裝一組可以互相替代的演算法族,並且可以根據需要動態地去替換 Context 使用的演算法。
通俗的講,策略模式就是通過面向介面程式設計後生出的很多策略類,然後根據上下文選擇策略類進行呼叫。實現比較容易。
什麼場景使用策略模式?
只要有一堆if else if else ...就可以用策略模式替換。
如果演算法實現裡又有條件語句,就構成了多重條件語句,可以用策略模式,避免這樣的多重條件語句。
**注意事項:**如果一個系統的策略多於四個,就需要考慮使用混合模式,解決策略類膨脹的問題。
為什麼要使用策略模式?
擴充套件性更好,面向介面程式設計。符合開閉原則和里氏替換原則。
- 演算法可以自由切換。
- 避免使用多重條件判斷。
- 擴充套件性良好。
Strategy.java
一個策略介面,裡面宣告瞭策略的行為。
public interface Strategy {
int handler(int a, int b);
}
複製程式碼
AddHandler.java
策略: 加法. 實現了Strategy介面,按照功能重寫它的方法。
public class AddHandler implements Strategy{
@Override
public int handler(int a, int b) {
return a+b;
}
}
複製程式碼
SubtractHandler.java
策略:減法
public class SubtractHandler implements Strategy{
@Override
public int handler(int a, int b) {
return a-b;
}
}
複製程式碼
StrategyContext.java
策略上上下文,有了這部分,客戶可以通過與它進行互動就可以了。使策略模式更加完整,使客戶端更加簡單。
public class StrategyContext {
private Strategy strategy;
StrategyContext(Strategy strategy){
this.strategy = strategy;
}
public int execute(int a, int b){
return strategy.handler(a, b);
}
}
複製程式碼
Main.java
測試方法。
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架構
獲取架構視訊資源(後期還會分享不同的優質資源噢)。