针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。
实现一个烹饪需求,要求或煎或烤:
1)定义策略接口及其实现类;
2)定义策略context,作为挑选策略的载体;
3)烹饪
// 策略接口
public interface Strategy {
// 烹饪方式
public String getCookWay();
}
// 一种烹饪策略
public class Fry implements Strategy {
@Override
public String getCookWay() {
return "fry";
}
}
// 一种烹饪策略
public class Roast implements Strategy{
@Override
public String getCookWay() {
return "roast";
}
}
// 策略Context
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public String getCookWay() {
return strategy.getCookWay();
}
}
// 调用方
public class Cook {
public static void main(String[] args) {
Context context1 = new Context(new Fry());
System.out.println("CookWay :" + context1.getCookWay());
Context context2 = new Context(new Roast());
System.out.println("CookWay :" + context2.getCookWay());
}
}