定义
- 封装了不同的算法,让他们可以相互替换,算法的变化不会影响使用算法的用户
类型:行为型
使用场景
- 系统有很多类,而他们的区别在于行为不同
- 一个系统需要动态的在几种算法中选择一种
优缺点
优点:
- 开闭原则
- 避免使用大量的条件转移语句(if...else...)
- 提高算法的保密性和安全性
缺点:
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
- 产生很多策略类
策略和工厂模式结合
public class PromotionStrategyFactory {
private static Map<String, PromotionStrategy> PROMOTION_STRATEGY = new HashMap<String, PromotionStrategy>();
static {
PROMOTION_STRATEGY.put(PromotionKey.MANJIAN, new ManJianPromotionStrategy());
PROMOTION_STRATEGY.put(PromotionKey.LIJIAN, new LiJianPromotionStrategy());
PROMOTION_STRATEGY.put(PromotionKey.FANXIAN, new FanXianPromotionStrategy());
}
private static PromotionStrategy EMPRT_PROMOTION = new EmptyPromotionStrategy();
private PromotionStrategyFactory() {
}
public static PromotionStrategy getPromotionStrategy(String PromotionKey) {
PromotionStrategy promotionStrategy = PROMOTION_STRATEGY.get(PromotionKey);
return promotionStrategy == null ? EMPRT_PROMOTION : promotionStrategy;
}
private interface PromotionKey {
String LIJIAN = "LIJIAN";
String MANJIAN = "MANJIAN";
String FANXIAN = "FANXIAN";
}
}
image.pngUML类图
网友评论