設計模式快速學習(七)策略模式

策略模式主要是用來封裝一組能夠互相替代的算法族,而且能夠根據須要動態地去替換 Context 使用的算法。java

通俗的講,策略模式就是經過面向接口編程後生出的不少策略類,而後根據上下文選擇策略類進行調用。實現比較容易。算法

什麼場景使用策略模式?

只要有一堆if else if else ...就能夠用策略模式替換。編程

若是算法實現裏又有條件語句,就構成了多重條件語句,能夠用策略模式,避免這樣的多重條件語句。bash

**注意事項:**若是一個系統的策略多於四個,就須要考慮使用混合模式,解決策略類膨脹的問題。架構

爲何要使用策略模式?

擴展性更好,面向接口編程。符合開閉原則和里氏替換原則。ide

  1. 算法能夠自由切換。
  2. 避免使用多重條件判斷。
  3. 擴展性良好。
Strategy.java

一個策略接口,裏面聲明瞭策略的行爲。測試

public interface Strategy {
    int handler(int a, int b);
}
複製代碼
AddHandler.java

策略: 加法. 實現了Strategy接口,按照功能重寫它的方法。ui

public class AddHandler implements Strategy{
    @Override
    public int handler(int a, int b) {
        return a+b;
    }
}
複製代碼
SubtractHandler.java

策略:減法this

public class SubtractHandler implements Strategy{
    @Override
    public int handler(int a, int b) {
        return a-b;
    }
}
複製代碼
StrategyContext.java

策略上上下文,有了這部分,客戶能夠經過與它進行交互就能夠了。使策略模式更加完整,使客戶端更加簡單。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);
    }
}
複製代碼
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架構獲取架構視頻資源(後期還會分享不一樣的優質資源噢)。
相關文章
相關標籤/搜索