行为型设计模式:策略模式

策略模式:定义一族算法类,将每个算法封装起来,让他们可以相互替换。策略模式可以使算法的变化独立于他们的使用者。

策略模式是基于接口编程的,一个策略接口和一组策略实现,可以自由替换实现:

// 策略的定义
public interface DiscountStrategy {
  double calDiscount(Order order);
}
// 省略NormalDiscountStrategy、GrouponDiscountStrategy、PromotionDiscountStrategy类代码...

策略模式包含一组策略,在使用时通过type判断使用哪种策略,通过工厂模式封装创建细节:

// 策略的创建
public class DiscountStrategyFactory {
  private static final Map<OrderType, DiscountStrategy> strategies = new HashMap<>();

  static {
    strategies.put(OrderType.NORMAL, new NormalDiscountStrategy());
    strategies.put(OrderType.GROUPON, new GrouponDiscountStrategy());
    strategies.put(OrderType.PROMOTION, new PromotionDiscountStrategy());
  }

  public static DiscountStrategy getDiscountStrategy(OrderType type) {
    return strategies.get(type);
  }
}

通过以上方式,封装了创建过程,其中在map中获取实例的方式我们称为查表法,以此代替if-else等多分支条件的判断,现在进行使用:

// 策略的使用
public class OrderService {
  public double discount(Order order) {
    OrderType type = order.getType();
    DiscountStrategy discountStrategy = DiscountStrategyFactory.getDiscountStrategy(type);
    return discountStrategy.calDiscount(order);
  }
}

通过以上方式,同一个行为的不同实现方式得到了实现,运行时的动态确认是策略模式的实现精髓,最终达到的目的还是解耦。

posted @ 2022-04-19 14:12  皮肤黝黑的小白  阅读(28)  评论(0编辑  收藏  举报