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

微笑面對生活發表於2019-03-02

策略模式主要是用來封裝一組可以互相替代的演算法族,並且可以根據需要動態地去替換 Context 使用的演算法。

通俗的講,策略模式就是通過面向介面程式設計後生出的很多策略類,然後根據上下文選擇策略類進行呼叫。實現比較容易。

什麼場景使用策略模式?

只要有一堆if else if else ...就可以用策略模式替換。

如果演算法實現裡又有條件語句,就構成了多重條件語句,可以用策略模式,避免這樣的多重條件語句。

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

為什麼要使用策略模式?

擴充套件性更好,面向介面程式設計。符合開閉原則和里氏替換原則。

  1. 演算法可以自由切換。
  2. 避免使用多重條件判斷。
  3. 擴充套件性良好。
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架構獲取架構視訊資源(後期還會分享不同的優質資源噢)。



相關文章