設計模式之策略模式

策略模式

策略模式是一種對象行爲型模式,策略模式將算法封裝在對象中,這樣可以方便地指定和改變一個對象所使用的算法。

定義

定義一系列的算法,把它們一個個封裝起來,並且使它們可相互替換。本模式使得算法可獨立於使用它的客戶而變化。

使用場景

  • 許多相關的類僅僅是行爲有異。“策略”提供了一種用多個行爲中的一個行爲來配置一個類的方法。
  • 需要使用一個算法的不同實體。例如,你可能會定義一些反映不同的空間/時間權衡的算法。當這些變體實現爲一個算法的類層次時,可以使用策略模式。
  • 算法使用客戶不應該知道的數據。可使用策略模式以避免暴露覆雜的,與算法相關的數據結構。
  • 一個類定義了多種行爲,並且這些行爲在這個類的操作中以多個條件語句的形式出現,將相關的條件分支移入它們各自的Strategy類中以代替這些條件語句。

結構

策略模式結構圖

實現

public interface Strategy {

    void algorithmOperate();

}

public class ConcreteStrategyA implements Strategy {

    public void algorithmOperate() {
        System.out.println("ConcreteStrategyA's algorithmOperate");
    }

}

public class ConcreteStrategyB implements Strategy {

    public void algorithmOperate() {
        System.out.println("ConcreteStrategyB's algorithmOperate");
    }

}

public class Context {

    private Strategy strategy;

    public Context(Strategy strategy){
        this.strategy = strategy;
    }

    public void contextOperate(){
        strategy.algorithmOperate();
    }


}

測試

public class Client {

    public static void main(String[] args) {

        Strategy startegy = new ConcreteStrategyA();
        Context con = new Context(startegy);
        con.contextOperate();
    }

}

測試結果:ConcreteStrategyA’s algorithmOperate

策略模式的決定權在用戶,系統本身提供不同算法的實現,新增或者刪除算法,對各種算法做封裝。因此,策略模式多用在算法決策系統中,外部用戶只需要決定用哪個算法即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章