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.策略模式需要客户知道各个模式作用由客户选择具体策略,而状态模式只需要传递状态不需要知道作用。