记项目中使用策略模式替代if-else

今天又遇到了循环嵌套if-else的情况,本想能不能使用老办法使用map替代if-else判断。最后得出结论不管是使用map还是枚举类都只能处理不含参数的简单业务逻辑。最终还是要使用策略模式来解决今天的问题。

1.什么是策略模式?

  • 徐凤年要送一坛酒给陈平安,可以自己送过去也可以顺丰、韵达、菜鸟、中通....
  • 这些把酒送到陈平安手里的方法就是徐凤年的送酒策略。
  • 可以按照不同的条件时效(酒已经开封了,一个时辰送不到就凉凉)、经济(徐凤年经费告急)、心情等条件选择不同的送酒策略
  • 现在徐凤年不想考虑那么多把送酒的任务交给了小泥人,让小泥人决定如何送酒。
  • 小泥人找了几个天象小弟一人分配一种情况,符合谁的条件就由谁去送酒。
  • 到此徐凤年就完成了从if-else到策略模式的转变。

策略模式主要包含

上下文Context

image.png

策略角色

image.png

策略执行对象

image.png
三部分组成

使用的时候可以再加上策略工厂,和策略枚举类。方便策略的管理

  • 策略工厂

image.png

  • 策略枚举

image.png

策略模式适合处理复杂业务的多分支场景,策略工厂中需要注入其他属性可以通过bean的后置处理器放入。简单情况(执行无参业务)可以通过枚举类处理,不需要创建策略模式这么多类。同业务逻辑仅仅是不同的情况参数不同,则可以使用map处理,一个map替换掉原来冗长的条件逻辑。

阅读 179

推荐阅读