百度一搜,策略模式想必各类文章都有,今天讲一讲你在其他地方看不到的策略模式的思想。代码谁都会写,思想不是谁都有的。
策略模式
上节我们稍微的探讨了下SpringSession中包含的设计模式。SpringSession 设计模式分析这节我们应用下SpringSession 所涉及的策略模式。
策略模式的UML图
假设鹅厂推出了2种会员,分别为会员,超级会员,还有就是普通玩家,针对不同类别的玩家,购买《王者农药》皮肤有不同的打折方式。
第一步设计顶级接口
第二步各级策略实现
普通用户算价
Vip算价
superVIP算价
第三步 对外提供统一算价入口
这样做的好处有
1. 如果以后需要在算价前或者算价后做统一处理的话只需要修改对外提供的类,调用方可以不用修改
2. 层次清晰,收拢策略算价入口。
看到截图有没有疑问,为什么是使用List calPrices ,而不是使用CalPrice calPrice (List calPrices以下称为多,CalPrice calPrice 称为一)? 记住一点,一只是多的一种特殊情况,满足了多的情况肯定是可以满足一的情况的。比如我要计算VIP + SuperVIP的价格之和,一的情况是不是需要调用两次,多的情况是不是只需要调用一次?
第四步 需求增加
突然有一天,产品拍脑瓜子一想。我们应该搞个 '超级无敌VIP',这种VIP买所有的东西都是5折。
现在我们程序应用了策略模式,因此对于产品的这种新增的需求简直就是小case。只要新增这种VIP对应的算价策略就可以了。
总结
策略模式的优点:职责单一,层次清晰,易于扩展,减少if-else的编写。其实还有一点很多网络文章都没有提到,这种模式可以最大程度的减少对现有代码的破坏。这怎么理解,因为不用去修改原来稳定的代码,只是新增代码,原来怎么跑的还是怎么跑,所以最坏的情况就你新增的代码有问题罢了。我们写代码最怕的就是修改原来的代码,逻辑简单还好,逻辑复杂那就gg.
不定期的更新Java技术文章。欢迎关注!