1.意圖
定義一系列算法並且封裝起來是它們可以相互替換。此模式可以使算法獨立於使用的客戶而變化
2.參與者
Strategy -定義算法的公共接口,Context調用具體算法
ConcreteStrategy - 實現具體的算法
Context - 用一個具體ConcreteStrategy來配置
- 維護一個Strategy對象引用
- 定義一個接口讓Strategy訪問它的數據
3.結構
4.代碼
public interface Strategy {
int getPrice();
}
public class ConcreteStrategy implements Strategy {
@Override
public int getPrice() {
// TODO Auto-generated method stub
return 20;
}
}
public class ConcreteStrategy2 implements Strategy {
@Override
public int getPrice() {
// TODO Auto-generated method stub
return 15;
}
}
public class ConcreteStrategy3 implements Strategy {
@Override
public int getPrice() {
// TODO Auto-generated method stub
return 10;
}
}
public class ConcreteStrategy4 implements Strategy {
@Override
public int getPrice() {
// TODO Auto-generated method stub
return 20;
}
}
public class Context {
private Strategy strategy;
public int getPrice(){
return strategy.getPrice();
}
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
public class Client {
public static void main(String[] args) {
Context c = new Context();
c.setStrategy(new ConcreteStrategy());
System.out.println(c.getPrice());
}
}
5.策略模式需要客戶知道各個模式作用由客戶選擇具體策略,而狀態模式只需要傳遞狀態不需要知道作用。