策略模式

策略模式在源代码中通常以StrategyPolicyHandler结尾,其中大多数以后2者为多,比如在JUC中,创建ThreadPoolExecutor对象需要一个RejectedExecutionHandler对象,该接口就是典型的策略模式接口。他有几个子类,比如DiscardOldestPolicyAbortPolicy等。

应用场景:JUC

  1. 创建ThreadPoolExecutor对象需要一个RejectedExecutionHandler对象,改接口就是一种策略模式,拥有不同的实现,每个实现都代表着一种不同的拒绝策略。

策略工厂消除ifelse

Spring策略工厂方式一

相关设计模式:

  1. 策略

  2. 工厂

  3. 享元

  4. spring Bean生命周期方法

  5. 模板方法

消息类型枚举,是判别策略的维度:

public enum MessageType {

    TYPE_A, 
    TYPE_B, 
    TYPE_C,
    ;
}

策略接口 MqSenderStrategy,实现Spring生命周期方法,用于在初始化后注册策略实现到Factory中:

抽象策略,可以引入模板方法模式,实现公共的业务逻辑:

策略实现:

工厂类:

Spring策略工厂方式二

与方式一相比:

  1. Factory类加入Spring IoC

  2. 策略类使用Autowrid机制自动加入到Factory中,而不是通过生命周期钩子主动注入,策略类更简洁,与Factory耦合更小

  3. 使用List存储策略实现类,然后可以通过@Order注解控制策略实现类的优先级(当策略选择条件复杂时,有可能多个策略同时满足,这个可以通过优先级处理)

策略接口不需要集成生命周期函数,需要暴露getMessageType方法供工厂类使用 :

策略实现:

策略工厂加入IoC,并且注入所有实现进入:

最后更新于

这有帮助吗?