二十三種設計模式:策略模式

"J.發表於2020-11-08

一、什麼是策略模式?

策略模式:類似於出行方式的不同。
比如:出去玩的方式有很多,
騎自行車、坐公交、坐火車、坐飛機、坐火箭,可以選擇哪種策略。

二、哪裡會用到策略模式?

三、怎麼使用策略模式?

策略模式的結構:
	1.抽象策略類:定義一個公共介面,使用不同的方式實現介面。環境角色呼叫不同的演算法。
	2.具體策略類:實現定義策略的介面,提供具體實現。
	3.環境類:持有一個策略類的引用,最終呼叫給客戶端。

1.宣告抽象策略類:

public abstract class Strategy {

    //演算法方法
    public abstract void algorithmInterface();

}

2.宣告具體策略類:

//具體策略類
public class ConStrategyA extends Strategy {
    //實現抽象方法
    @Override
    public void algorithmInterface() {
        System.out.println("演算法A實現");
    }

}

3.設定環境類:用於引用

//環境類
public class Context {
    //宣告抽象策略
    Strategy strategy;

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

    //上下文介面 用於引用當前的哪一種具體實現
    public void contextInterface() {
        strategy.algorithmInterface();
    }

}

4.客戶端:測試

public class Test {
    public static void main(String[] args) {
        Context context;
        //因為Context是個環境,需要實現構造方法(引數為ConStrategyA//ConStrategyA繼承了strategy)
        context = new Context(new ConStrategyA());
        context.contextInterface();
        context = new Context(new ConStrategyB());
        context.contextInterface();
    }
}

測試結果為:

演算法A實現
演算法B實現

設計步驟與技巧:

  1. 策略介面

    1.1建立策略介面(宣告abstract類)
    1.2建立策略方法(宣告abstract方法)
    
  2. 具體策略

    2.1建立具體策略類(為普通類,繼承策略介面)
    2.2覆蓋具體抽象策略方法(為普通方法,覆蓋實現)
    
  3. 建立環境類(重)

    3.1建立抽象策略屬性
    3.2覆蓋有參構造方法
    3.3建立環境上下文介面(用於呼叫或返回當前策略實現)
    
  4. 測試

    4.1宣告使用環境
    4.2宣告使用具體環境
    4.3呼叫具體策略方法

PS:萌新入坑,僅為個人思路。不喜勿噴,謝謝。

相關文章