行爲型模式-Strategy ( 策略模式 )

摘自《Java設計模式(瘋狂JAVA聯盟版)》


策略模式
 概述
    定義一系列的算法,把它們一個個封裝起來,並且使它們可相互替換。本模式使得算法可獨立於使用它的客戶而變化。
 適用性
    1.許多相關的類僅僅是行爲有異。“策略”提供了一種用多個行爲中的一個行爲來配置一個類的方法。

    2.需要使用一個算法的不同變體。

    3.算法使用客戶不應該知道的數據。可使用策略模式以避免暴露覆雜的、與算法相關的數據結構。

    4.一個類定義了多種行爲,並且這些行爲在這個類的操作中以多個條件語句的形式出現。
      將相關的條件分支移入它們各自的Strategy類中以代替這些條件語句。
			
 參與者
    1.Strategy
      定義所有支持的算法的公共接口。Context使用這個接口來調用某ConcreteStrategy定義的算法。

    2.ConcreteStrategy
      以Strategy接口實現某具體算法。

    3.Context
      用一個ConcreteStrategy對象來配置。
      維護一個對Strategy對象的引用。
      可定義一個接口來讓Stategy訪問它的數據。
 類圖
 例子
Strategy
public abstract class Strategy {

    public abstract void method();
}
ConcreteStrategy
public class StrategyImplA extends Strategy {

    public void method() {
        System.out.println("這是第一個實現");
    }
}
public class StrategyImplB extends Strategy {

    public void method() {
        System.out.println("這是第二個實現");
    }
}
public class StrategyImplC extends Strategy {

    public void method() {
        System.out.println("這是第三個實現");
    }
}
Context
public class Context {

    Strategy stra;
    
    public Context(Strategy stra) {
        this.stra = stra;
    }
    
    public void doMethod() {
        stra.method();
    }
}
Test
public class Test {
    
    public static void main(String[] args) {
        Context ctx = new Context(new StrategyImplA());
        ctx.doMethod();
        
        ctx = new Context(new StrategyImplB());
        ctx.doMethod();
        
        ctx = new Context(new StrategyImplC());
        ctx.doMethod();
    }
}
result
這是第一個實現
這是第二個實現
這是第三個實現

發佈了17 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章