策略模式

定义

  • 封装了不同的算法,让他们可以相互替换,算法的变化不会影响使用算法的用户

类型:行为型

使用场景

  • 系统有很多类,而他们的区别在于行为不同
  • 一个系统需要动态的在几种算法中选择一种

优缺点

优点:

  • 开闭原则
  • 避免使用大量的条件转移语句(if...else...)
  • 提高算法的保密性和安全性

缺点:

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
  • 产生很多策略类

策略和工厂模式结合

public class PromotionStrategyFactory {

    private static Map PROMOTION_STRATEGY = new HashMap();

    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";
    }
}

UML类图

image.png

你可能感兴趣的:(策略模式)