策略 +IOC 消灭 ifelse,拿来吧你
前言
策略模式 简单来说就是定义了一个算法的大家族,分别封装起来,让他们之间可以互相替换,算法的变化不会影响到使用算法的用户
简单来说,你的女朋友 618 在淘宝买东西,有许多折扣活动,比如满减、折扣、0 元购
普通的实现的话,就是这样
哦,不对你没有女朋友
但是!这并不影响我们理解策略模式,我们继续
策略模式本质就是用来消除 上图的 ifelse 带给我们的恐惧
接下来让我们实践一下
实现一下
我们先定义一个促销接口 PromotionStrategy
接下来三种的促销策略全部去实现这个促销接口,不一一贴图了
我们拿 0 元购的 FeeStrategy 举例
我们还可以写一个 DefaultStrategy 在外部瞎传促销类型的时候,进行一个默认的促销活动
ok,接下来,容器出场前,先看看我们的促销类型的枚举 EnumPromotionType
我们希望通过传递进来的促销类型,找到对应的交给容器管理的 bean,举个🌰,我当前传递进来 2-折扣类型,希望我可以找到 DisCountStrategy 这个 bean
来,看看代码
ok,这样就获得了我们对应的促销类型的实现类了
改造一下文章开头的一堆 ifelse
现在看起来,是不是清爽了许多
以后需要在增加策略活动的时候,比如 买车送女朋友
只需要补充枚举类,和在写一个实现类即可。不需要再 ifelse
总结
策略模式是一种较为好理解的设计模式,它可以与多种设计模式结合,当然第一出发点是我们的业务场景
通过策略设计模式的使⽤可以把我们⽅法中的 if 语句优化掉,满足我们的开闭原则,大大增加我们的扩展性
那么,留给大家一个问题,我们框架中哪些方法用到了策略模式?
文章结束 🤣
如果本文对你有所帮助的话,那就点个赞吧
更多分享尽在 Skow 的微信公众号
公众号回复 “资料” 可以获取大厂面试题/技术文档/电子书等等
版权声明: 本文为 InfoQ 作者【skow】的原创文章。
原文链接:【http://xie.infoq.cn/article/45216ae72c3c5a7f30b730dd4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论