定义
- 定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户
- if...else...
适用场景
- 系统有很多类,而他们的区别仅仅在于他们的行为不同
- 一个系统需要动态地在几种算法中选择一种
优点
- 符合开闭原则
- 避免使用多重条件转移语句
- 提供算法的保密性和安全性
缺点
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
- 会产生很多策略类
public interface SaleStrategy {
public void doSale();
}
public class FanxianStrategy implements SaleStrategy{
@Override
public void doSale() {
System.out.println("返现促销。。。");
}
}
public class ManjianStrategy implements SaleStrategy{
@Override
public void doSale() {
System.out.println("满减促销。。。");
}
}
public class SaleStrategyImpl {
//map容器用来存策略
private static Map<String,SaleStrategy> STRATEGY_MAP = new HashMap<>();
static {
STRATEGY_MAP.put("manjian",new ManjianStrategy());
STRATEGY_MAP.put("fanxian",new FanxianStrategy());
}
//根据策略名称,返回相应的策略
public SaleStrategy getSaleStrategy(String strategyName){
return STRATEGY_MAP.get(strategyName);
}
}
public class Test {
public static void main(String[] args) {
SaleStrategy manjian = new SaleStrategyImpl().getSaleStrategy("manjian");
SaleStrategy fanxian = new SaleStrategyImpl().getSaleStrategy("fanxian");
manjian.doSale();
fanxian.doSale();
}
}