![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
第七人格
写有价值的博客,分享有意义的生活ヾ(◍°∇°◍)ノ゙
展开
-
【观察者模式】如何更加了解你的女朋友们
楔子小七的朋友跟小七倾述,说他女朋友们希望他能像肚子里的蛔虫一样了解她的一举一动。小七微微一笑,这还不简单,弄个发布订阅(观察者)不就行了︿( ̄︶ ̄)︿!被观察者首先将小七朋友的女朋友抽象为一个类public class Girlfriend { private String name; public Girlfriend(String name) { this.name = name; } public String getName() {原创 2021-03-06 11:55:43 · 199 阅读 · 0 评论 -
【责任链模式】责任链模式原来如此简单
楔子小七的朋友最近在看springSecurity的源码,说是里面大量使用了责任链模式,感觉阅读起来有些吃力,正好小七在总结设计模式,希望用这篇文章让小七的朋友和读者们能够了解责任链模式。代码实现责任链,听着是个很唬人的词,实际上联系生活场景,到处都是他的体现。非常有代表性的就是请假流程,比如你请一个假必须要经过一系列校验,先得有请假原因,还得有请假天数,我们基于这个业务场景,给出以下代码实现。任务类public class Task { /** * 任务名称 */原创 2021-02-28 13:50:57 · 296 阅读 · 3 评论 -
【适配器模式】5分钟帮你搞懂适配器模式
楔子小七最近一直在学习Spring的源码,已经很久没写blog了,想到写作还是不能丢的,所以今天开始重启设计模式的文章,预计2~3个星期总结完。今天来个简单的——适配器模式。概念什么叫适配器模式呢?所谓适配就是把一个东西转换成另一个东西,比如生活中的变压器,把上万伏的电压变为220v,就是一个很好的例子。类适配器模式1、代码实现输入public class Source { public int output(){ int output = 220; S原创 2021-02-25 21:11:57 · 906 阅读 · 4 评论 -
记一次重构实战的逻辑梳理记录
最近聚餐,小七被公司公认代码写的很优雅的朱大神表扬了,说看了这么多代码,就只有邀请短信那个功能的多线程用的好,这里把重构这块代码的思路写出来,毕竟思考一整天,编程半小时,重要的是思维。业务需求起飞前一定时间内,给满足条件的旅客发送可升舱信息。逻辑整理(1)查询可升舱航班(集合)(2)查询每一个航班下可升舱旅客(集合)(3)过滤旅客(4)给满足条件的旅客,发送邀请升舱的短信改造前1、未做幂等和加锁,同一个接口,调多次,会造成数据积压和数据错误。2、判断是否已经邀请,直接通过数据库查询,数据原创 2021-02-01 13:40:01 · 3679 阅读 · 1 评论 -
【策略模式】重构代码 - 记一次策略模式的运用
背景小七最近看代码时发现了以前自己写的一个方法,伪代码如下:private BigDecimal matchingAlgorithm(String type, BigDecimal totalAmount) { // 匹配算法 // 个位,四舍五入 if (TypeEnum.HALF_UP.getCode().equals(type)){ } // 十位,向下取整 else if (TypeEnum.ROUND_FLOOR.getCode(原创 2020-12-15 21:01:19 · 7461 阅读 · 1 评论 -
【装饰者模式】重构代码 - 记一次装饰者模式的运用
背景小七的朋友最近有一个烦恼,他想在不改变原有对象的基础上,将功能附加到对象上,问我有没有什么解决方案。小七第一个想到的就是继承和装饰者模式,因为装饰者模式相对继承来说,可以动态的给一个对象添加功能,并且这些功能还可以动态的撤销。思考过程假设我们我们有一个平板,它有描述和成本两个属性:抽象的平板类public abstract class AbstractTablet { /** * 描述 * * @return {@link String} */原创 2020-12-05 14:22:13 · 7944 阅读 · 1 评论 -
【建造者模式】重构代码 - 记一次建造者模式的使用
背景小七最近在看项目代码时,发现了一个很奇怪的类。代码大概如下:public class Student { private String name; private int age; public Student() { } public Student(String name) { this.name = name; } public Student(int age) { this.age =原创 2020-12-02 21:52:29 · 8687 阅读 · 2 评论 -
【工厂模式】重构代码 - 工厂模式用起来
背景记得刚入行的时候,听过一个段子,同样开发一个功能初级程序员要1天,中级程序员要2天,高级程序员要1个星期。当时以为是老油条划水(虽然肯定还是会划一点水,哈哈),但是其实更重要的还是设计思想的不同,经验丰富的程序员往往考虑的更多,不光是业务拓展性,更有程序拓展性。结合最近的一次重构代码,这里想记录下程序员的内功心法之工厂模式。我这次重构的功能点是一个图片上传功能,逻辑很简单,就是把图片上传到静态服务器,但是当第一个人写下第一行代码后,并没有把他提炼成一个公共方法,导致后面的同学把这一大段代码当祖传原创 2020-11-27 23:25:05 · 10240 阅读 · 1 评论 -
【模板模式】重构代码 - 记一次模板模式的运用
背景最近迭代项目退款功能时,发现一个Service居然有3000多行,Controller 也有 1000 多行,无尽的 if-else 和各种奇奇怪怪的重载方法,简直让人崩溃,哪怕只是修改或者添加一点逻辑,都要通读整个类。为了以后拓展方便,最终还是决定花点时间,重构了这一套逻辑。通过梳理业务逻辑,我们发现其实对于退款这个业务,完全可以使用模板模式,模板化它的共用方法和步骤,特异方法延迟到子类去实现,以下是简单的一个思考过程。思考过程首先经过思考,我们有了一个顶级抽象父类。它大概张这个样子:原创 2020-11-26 00:54:42 · 10187 阅读 · 4 评论