〇、小故事
小王大学毕业后,他找到了一份体面的工作。他从早上八点到五点都很放松,收入也很好。自从大学毕业以来,他在家里使用的电脑仍然是他上大学时使用的四年的电脑。配置性能已经跟不上现在的时代。他决定用自己的工资买一台家用电脑。
他咨询了他的好朋友,很多人建议他买一个苹果一体机
,所有的硬件都集成在显示器中,设计非常漂亮,占用的空间也很小。他还去了实体店,一眼就看中了它,然后高兴地买了一个。
新电脑配置高,流畅性特别好。然而,几个月后,他的好朋友告诉他,让我们一起玩吧《逃离塔科夫》
这个游戏很有趣。我们兄弟一起组队杀了他!当然,小王也想一起玩,但这款游戏需要独立的显卡,对显卡性能的要求相对较高。小王的苹果一体机是集成显卡,不符合游戏的最低要求。
小王挣扎了好几天,他还咨询了他的朋友。他的朋友说你是一台集成机器,不能更换显卡。如果你买了一台正常的台式机器,更换配件要容易得多。没有办法,小王不得不卖掉他最喜欢的苹果一体机(重大损失……),然后买了一台正常的台式机器。
一、原则定义从上面的小故事中,我们可以看到小王不能玩这个游戏的主要原因是显卡配置太低了。由于一体机对硬件升级的“开闭原则”非常不友好,只能通过更换电脑来满足用户的需求。
对于普通计算机,显卡无法升级显卡;主板无法升级主板;硬盘无法升级硬盘。。。我们发现,对于不同的需求,我们只需要进行小规模的调整,而不是更换整台计算机。然后,这符合我们即将介绍的开关原则。
让我们来看看这一设计原则的定义:
二、原则实践对于类别、方法和模块,应对扩展和修改进行开放和关闭。一般来说,添加一个功能应该在现有代码的基础上扩展,而不是修改现有代码。
通过以上小王购买电脑的例子和原则的定义描述,我们对开关原则有了大致的了解。为了加深我们对这一设计原则的理解,我们举了一个商业实例,以进一步了解它在实践中的应用。
业务场景:
我们有一个需要做用户活动相关功能的应用程序,也就是说,每次618、双11、节假日将开展一系列用户活动,该用户活动将经常创建,活动截止日期将离线。那么,我们应该如何设计这个需求呢?
需求特点:
活动的上线和下线会非常频繁,每段时间同时上线的活动列表也会有所不同,活动服务也会非常不稳定。
所以,对于这种情况,我们理想的应对方式是:
PM来和你讨论最新的在线和离线活动,你只需要“配置”或更少的修改,就可以很容易地满足PM的需求。
所以,这种场景,一定要遵循开闭原则的设计方法,否则,你就会被层出不穷的活动需求所迷惑。
我们应该如何设计它?我们可以通过模板方法+策略模式进行设计,灵活性可以通过配置中心
/DB
为了实现中间配置活动列表,在调用业务逻辑时,从配置中心/DB获取相应的活动beanName
,然后从IOC
在操作中获取实例对象即可。具体设计见下图所示:
以下是今天文章的内容:
写作并不容易。作者几个小时甚至几天就完成了一篇文章。我只想换取你几秒钟 点赞 & 分享 。
更多技术干货,欢迎关注微信官方账号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」