1. 程式人生 > >設計模式-策略模式(strategy pattern)

設計模式-策略模式(strategy pattern)

pre rac uml類圖 獨立 CA 使用 dep () nes

來說說設計模式吧,最近開始看設計模式,覺得挺有意思的。設計模式網上的資料的挺多的,而且大部分是大家相互轉來轉去的。感覺也挺沒有意思。我就自己寫一點吧!

開始 學習設計模式,我會用自己的畫的UML類圖來說明問題,代碼也是通過UML類圖生成的。

先來看看策略模式的定義:

The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.(策略模式定義了算法族,

分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨立於算法的使用)。

下面是我話的最簡單一種策略的UML圖,沒有畫出調用類。(復雜一點策略模式會出現多族策略)

技術分享圖片

下面貼出我根據上面UML圖生成的代碼:

策略接口
public interface IStrategy {
public abstract void play();
}
策略的三種實現
public class StrategyA implements IStrategy {
public void play() {
System.out.println("執行了策略-------A");
}
}

public class StrategyB implements IStrategy {
public void play() {
System.out.println("執行了策略-------B");
}
}

public class StrategyC implements IStrategy {
public void play() {
System.out.println("執行了策略------C");
}
}


策略上下文
public class Context {
private IStrategy strategy;

public Context() {

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

public void setStrategy(IStrategy strategy) {
this.strategy = strategy;
}

public void display(){
strategy.play();
}
}

test類:
public class Test {
public static void main(String[] args) {
Context context = new Context(new StrategyA()); //通過構造方法,註入了策略A
context.display();

Context context1 = new Context();
context1.setStrategy(new StrategyB()); //通過set方法,註入了策略B
context1.display();

Context context2 = new Context();
context2.setStrategy(new StrategyC()); //通過set方法註入了策略C
context2.display();

}
}

**************************輸出結果*********************************************

執行了策略-------A
執行了策略-------B
執行了策略------C

*****************************************************************************

這個設計是最簡單的一種了,具體復雜的我們可以想象再加入什麽一些高級的東西。
最後有什麽問題歡迎大家指正!!!!!!!

設計模式-策略模式(strategy pattern)