# 故事
“不能在写if else来拓展当前系统了,现在已经有三个支付场景了......”工位上,小猫看着电脑,挠着头。
就在刚刚,小猫接到了一个新需求,需要和客户公司打通资产,形成资产联动。说白了就是需要定制化对接客户公司的支付资产体系。除了这次接到的之外。前面其实已经对接了三家了。由于每家对接规范都不一样,历史对接的时候为了尽快上线,都是直接搞个else的新路由分支,然后去实现支付,退款。
在小猫看来,就是在堆屎山。牵一发而动全身的感觉真的很不好。由于本次的需求留有的时间还是相当充裕的,所以小猫下定决心,打算利用这次的拓展,将原来不合理的地方用上设计模式将其重构掉。
深思熟虑很久,小猫下定决心打算用“策略模式”重构一番。
分享是最有效的学习方式。
博客:https://blog.ktdaddy.com/
老猫的设计模式专栏已经偷偷发车了。不甘愿做crud boy?看了好几遍的设计模式还记不住?那就不要刻意记了,跟上老猫的步伐,在一个个有趣的职场故事中领悟设计模式的精髓。还等什么?赶紧上车吧
如果把系统软件比喻成江湖的话,那么设计原则绝对是OO程序员的武功心法,而设计模式绝对是招式。光知道心法是没有用的,还是得配合招式。只有心法招式合二为一,遇到强敌(“坑爹系统”)才能见招拆招,百战百胜。# 故事
之前让小猫梳理的业务流程以及代码流程基本已经梳理完毕【系统梳理大法
在小猫接手的系统中,线程池的创建基本是想在哪个类用多线程就在那个类中直接创建。所以基本上很多service服务类中都有创建线程池的影子。那么他又该如何应对呢?
# 写在前面
遇到上述小猫的这种情况,我们的思路是采用单例模式进行提取公共线程池执行器,然后根据不同的业务类型使用工厂模式进行分类管理。
接下来,我们就单例模式开始吧。
# 故事
这段时间以来,小猫按照之前的系统梳理方案【系统梳理大法
系统中涉及的业务以及模型也基本了然于胸,但是这代码写的真的是...
小猫也终于知道了为什么每天都有客诉,为什么每天都要去调用curl语句去订正生产的数据,为什么每天都在Hotfix...
整理了一下,大概出于这些原因,业务流程复杂暂且不议,光从技术角度来看,整个代码体系臃肿不堪,出问题之后定位困难,后面接手的几任开发为了解决问题都是“曲线救国”,不从正面去解决问题,为了解决一时的客诉问题而去解决问题,于是定义了各种新的修复流程去解决问题,这么一来,软件系统“无序”总量一直在增加,整个系统体系其实在初版之后就已经在“腐烂”了,如此?且抛开运维稳定性不谈,就系统本身稳定性而言,能好?
整个系统,除了堆业务还是堆业务,但凡有点软件设计原则,系统也不会写成这样了。
# 故事
这几天的小猫心情还不错,修完了"幂等事件的bug
这天,小猫提着两杯咖啡找到了产品经理,本来么,礼多人不怪,这不效果就来了么。
“......整个业务背景呢,其实也就是这样了,然后后面有啥其他问题,也欢迎随时问,知无不答”。产品老汪和小猫足足聊了一半个小时,唾沫星子横飞,似乎还有点意犹未尽。
“嗯嗯,谢谢了,汪哥,耽误你时间了。”
“没事儿,不用客气,不过提醒你一下,当前系统经过太多开发的手了,系统代码得好好看看,听说初版本的时候都是外包搞的。你懂得......”
“嗯嗯,好,太感谢了” 小猫连连点头,老汪的话倒是提醒了他。
内心开始嘀咕,“哎。看来搞定各种模型关系,业务背景也还是不行啊,面对现实吧,烂怂代码还是得梳理一下的,当前系统的接口定义、以及类的封装貌似都挺乱的......”
# 故事
接二连三地背锅让小猫的内心受到了前所未有的打击。这也是他职业生涯中的第一次。感兴趣的伙伴们如果想了解一下小猫怎么了,可以看一下“幂等事件
这天组长找小猫来到了一间会议室。
“在这么短的时间内发生了这么多的事故,我想也你心里也不好受,也不怪你,毕竟刚接手项目。以前项目中可能本身存在一定问题。正好轮到你头上,我希望你也不要灰心......”,组长在一边balabala。
小猫在一旁小鸡啄米似的点着头。紧张的内心缓和了许多,“听组长这语气,貌似不扣我绩效啊”,小猫心里寻思着。
“但是呢,事情是发生了,系统中估计还有其他的问题,无论是业务上的还是代码上的亦或是设计上的,然后我希望你最近可以花时间整理一下,然后输出一份项目文档分析。等到下次月会的时候一起分享一下当前系统的情况。”
小猫连连点头,心里琢磨“看来还是躲不过当众批斗这关啊,罢了罢了,可是,这样的一份文档该从哪个口子开始呢,到底该怎么写呢”
此时的小猫内心又开始不安起来。
之前介绍了简单工厂模式,我们也认识到简单模式的缺点其实也很明显,工厂类的职责相对过重,不易于扩展过于复杂的产品结构。所以我们现在来介绍一下工厂方法模式。工厂方法模式是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法模式其宗旨其实就是将类的实例化推迟到子类中进行。在工厂方法模式中用户只需要关心所需产品对应的工厂,无需关心创建细节。
接下来我们还是拿酒厂的例子来做代码演示。
在现实生活中,其实我们可以看到很多的工厂,大大小小的,从最最简单的的造酒厂到大型的代加工的富士康,这个其实就是工厂的演变以及进化。于是乎在我们Java世界里,其实工厂模式也可以进化演变。老猫研究了一段时间,并且总结分享给大家。
进化的流程大致是这样的:
简单工厂模式->工厂方法模式->抽象工厂模式。接下来,跟着老猫一个一个往下看,在此期间,老猫会举一些例子,供大家参考。
上一页
下一页