設計模式-策略模式(strategy pattern)
阿新 • • 發佈:2018-05-28
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)