乐趣区

关于java:收藏本文相当于收藏一本设计模式的书

本文节选自《设计模式就该这样学》

本文自 2012 年 10 月 29 日起继续连载,请大家继续关注 ….

序言

Design Patterns: Elements of Reusable Object-Oriented Software(以下简称《设计模式》),一书由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这四位作者常被称为“四人组(Gang of Four)”,而这本书也就被称为“四人组(或 GoF)”书。他们首次给咱们总结出一套软件开发能够重复应用的教训,帮忙咱们进步代码的可重用性、零碎的可维护性等,解决软件开发中的简单问题。

设计模式已诞生 20 多年,其间相继出版的对于设计模式的经典著作成千上万。如果说 GoF 的《设计模式》是设计模式畛域的“圣经”,那么之后出版的各种对于设计模式的书籍可称为“圣经”的“批注版”或者“文言版”。本书正是基于 GoF 的《设计模式》来编写的。

《设计模式》总结的是经验之谈,千万不要死记硬背,生吞活剥。上面来总体预览一下设计模式的分类和总结,如下表所示。

分 类 解 释 举 例
创立型设计模式(Creational) 这类设计模式提供了一种在创建对象的同时暗藏创立逻辑的形式,而不是应用新的运算符间接实例化对象,这使得程序在判断针对某个给定实例须要创立哪些对象时更加灵便 工厂办法模式(Factory Method Pattern)、形象工厂模式(Abstract Factory Pattern)、单例模式(Singleton Pattern)、原型模式(Prototype Pattern)、建造者模式(Builder Pattern)
结构型设计模式(Structural) 这类设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象取得新性能的形式 代理模式(Proxy Pattern)、门面模式(Facade Pattern)、装璜器模式(Decorator Pattern)、享元模式(Flyweight Pattern)、组合模式(Composite Pattern)、适配器模式(Adapter Pattern)、桥接模式(Bridge Pattern)
行为型设计模式(Behavioral) 这类设计模式特地关注对象之间的通信 模板办法模式(Template Method Pattern)、策略模式(Strategy Pattern)、责任链模式(Chain of Responsibility Pattern)、迭代器模式(Iterator Pattern)、命令模式(Command Pattern)、状态模式(State Pattern)、备忘录模式(Memento Pattern)、中介者模式(Mediator Pattern)、解释器模式(Interpreter Pattern)、观察者模式(Observer Pattern)、访问者模式(Visitor Pattern)

本文是我对“圣经”实际的精髓总结,全文内容节选自《设计模式就该这样学》,这是一本能够真正可能落地的“设计模式”之书,也是目前惟一一本联合框架源码如何落地“设计模式”这个角度来了解设计模式的书。本文也将会联合 JDK、Spring、MyBatis、Tomcat、Netty 等经典框架源码开展对设计模式的剖析。当然,本文还会联合我多年的“踩坑填坑”教训和“教学答疑”教训,用比“圣经”更粗浅、更全面、更艰深、更活泼、更乏味、更接地气的形式并且联合实在业务场景剖析每种设计模式的优缺点,治愈“设计模式抉择艰难症”。选设计模式就像相亲选对象,一旦做好了承受 TA 毛病的筹备,那 TA 就肯定属于你。所以,本文对于日常开发而言更具备指导意义。

Tom 弹架构,只弹干货不掺水,本文所有分享内容均从实战角度登程,不谈概念,只谈实战和利用落地

1 各种设计模式应用频率总结

以下是依据自己的集体教训,对设计模式应用频率的总结,不可作为学术根据,仅供大家参考。因为设计模式的抉择还是要依赖具体的业务场景的,每个人接触的业务畛域都不一样,天然设计模式的抉择也会不一样。

1.1 创立型设计模式

如下图所示,创立型设计模式中应用频率由高到低顺次为工厂办法模式、形象工厂模式、建造者模式、单例模式、原型模式。原型模式个别都有现成的工具类,本人造轮子的状况比拟少。

1.2 结构型设计模式

如下图所示,结构型设计模式中应用频率由高到低顺次为适配器模式、装璜器模式、代理模式、门面模式、组合模式、享元模式、桥接模式。其中桥接模式个别都有现成的工具类,本人造轮子的状况比拟少。

1.3 行为型设计模式

如下图所示,行为型设计模式中应用频率由高到低顺次为策略模式、观察者模式、责任链模式、解释器模式、模板办法模式、迭代器模式、中介者模式、命令模式、访问者模式、备忘录模式、状态模式。其中,观察者模式、解释器模式、迭代器模式、中介者模式、命令模式、访问者模式、备忘录模式个别都有现成的工具类,本人造轮子的状况比拟少。

上面依据自己多年钻研设计模式的经验总结,将压箱干货首次全网公布。如果本文对您有帮忙肯定要珍藏,也欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源。关注『Tom 弹架构』可获取更多技术干货!

2 为什么肯定要学习设计模式

题目 备注
为什么肯定要学习设计模式 2021/10/29 已更新

3 七大架构设计准则篇

题目 备注
开闭准则(Open-Closed Principle,OCP) 2021/10/21 已更新
依赖倒置准则(Dependence Inversion Principle,DIP) 2021/10/22 已更新
繁多职责准则(Simple Responsibility Principle,SRP) 2021/10/23 已更新
接口隔离准则(Interface Segregation Principle,ISP) 2021/10/24 已更新
迪米特法令(Law of Demeter,LoD) 2021/10/25 已更新
里氏替换准则(Liskov Substitution Principle,LSP) 2021/10/26 已更新
合成复用准则(Composite/Aggregate Reuse Principle,CARP) 2021/10/27 已更新

目录仅代表更新打算,因精力调配起因不肯定按程序目录程序连载,打算 1 个月(即 2021 年 11 月 31 日前)连载结束,请小伙伴们继续关注本文更新,大家能够先关注和珍藏本文或者关注『Tom 弹架构』更新告诉,感谢您的反对!

4 创立型设计模式

题目 备注
简略工厂模式(Simple Factory Pattern) 待更新 …
工厂办法模式(Factory Method Pattern) 待更新 …
形象工厂模式(Abstract Factory Pattern) 待更新 …
单例模式(Singleton Pattern)>> 这 9 个单例被毁坏的事故现场,你遇到过几个? 2021/10/26 已更新
原型模式(Prototype Pattern) 待更新 …
建造者模式(Builder Pattern)>> 用建造者模式实现一个防 SQL 注入的 ORM 框架 2021/10/26 已更新

5 结构型设计模式

题目 备注
代理模式(Proxy Pattern)>> 从没有人将代理模式分析得如此透彻 2021/10/27 已更新
门面模式(Facade Pattern) 待更新 …
装璜器模式(Decorator Pattern) 待更新 …
享元模式(Flyweight Pattern) 待更新 …
组合模式(Composite Pattern) 待更新 …
适配器模式(Adapter Pattern) 待更新 …
桥接模式(Bridge Pattern) 待更新..

6 行为型设计模式

题目 备注
委派模式(Delegate Pattern) 待更新 …
模板办法模式(Template Method Pattern) 待更新 …
策略模式(Strategy Pattern) 待更新 …
责任链模式(Chain of Responsibility Pattern)>> 这才是责任链模式的优雅应用形式 2021/10/27 已更新
迭代器模式(Iterator Pattern) 待更新 …
命令模式(Command Pattern) 待更新 …
状态模式(State Pattern) 待更新 …
备忘录模式(Memento Pattern) 待更新 …
中介者模式(Mediator Pattern) 待更新 …
解释器模式(Interpreter Pattern) 待更新 …
观察者模式(Observer Pattern) 待更新 …
访问者模式(Visitor Pattern) 待更新 …

7 新设计模式

题目 备注
对象池模式(Object Pool Pattern) 待更新 …
规格模式(Specification Pattern) 待更新 …
空对象模式(Null Object Pattern) 待更新 …
雇工模式(Employee Pattern) 待更新 …

8 一句话演绎设计模式

各种设计模式比照及编程思维总结如下表所示。

设计模式 一句话演绎 目 的 生存案例 框架源码举例
工厂模式(Factory Pattern) 产品标准化,
生产更高效
封装创立细节 实体工厂 LoggerFactory、Calender
单例模式(Singleton Pattern) 世上只有一个我
保障举世无双
CEO BeanFactory、Runtime
原型模式(Prototype Pattern) 拔一根猴毛,
吹出千万个
高效创建对象 克隆 ArrayList、PrototypeBean
建造者模式(Builder Pattern) 高配中配与低配,
想选哪配就哪配
凋谢共性配置步骤 选配 StringBuilder、
BeanDefinitionBuilder
代理模式(Proxy Pattern) 没有资源没工夫,
得找媒婆来帮忙
加强职责 媒婆 ProxyFactoryBean、
JdkDynamicAopProxy、CglibAopProxy
门面模式(Facade Pattern) 关上一扇门,
通向全世界
对立拜访入口 前台 JdbcUtils、RequestFacade
装璜器模式(Decorator Pattern) 他大舅他二舅,
都是他舅
灵便扩大、
同宗同源
煎饼 BufferedReader、InputStream
享元模式(Flyweight Pattern) 优化资源配置,
缩小反复节约
共享资源池 全国社保联网 String、Integer、ObjectPool
组合模式(Composite Pattern) 人在一起叫团伙,
心在一起叫团队
对立整体和个体 组织架构树 HashMap、SqlNode
适配器模式(Adapter Pattern) 万能充电器 兼容转换 电源适配 AdvisorAdapter、HandlerAdapter
桥接模式(Bridge Pattern) 约定优于配置 不容许用继承 DriverManager
委派模式(Delegate Pattern) 这个需要很简略,
怎么实现我不论
只对后果负责 受权委托书 ClassLoader、
BeanDefinitionParserDelegate
模板模式(Template Pattern) 流程全副标准化,
须要微调请笼罩
逻辑复用 把大象装进冰箱 JdbcTemplate、HttpServlet
策略模式(Strategy Pattern) 条条小道通北京,
具体哪条你来定
把选择权交给用户 抉择领取形式 Comparator、
InstantiationStrategy
责任链模式(Chain of Responsibility Pattern) 各人自扫门前雪,
莫管别人瓦上霜
解耦解决逻辑 踢皮球 FilterChain、Pipeline
迭代器模式(Iterator Pattern) 流水线上坐一天,
每个包裹扫一遍
对立对汇合的拜访形式 一一检票进站 Iterator
命令模式(Command Pattern) 运筹帷幄之中,
决胜千里之外
解耦申请和解决 遥控器 Runnable、TestCase
状态模式(State Pattern) 状态驱动行为,
行为决定状态
绑定状态和行为 订单状态跟踪 Lifecycle
备忘录(Memento Pattern) 失足不成千古恨,
想重来时就重来
备份,悔恨机制 草稿箱 StateManageableMessageContext
中介者(Mediator Pattern) 联系方式我给你,
怎么搞定我不论
对立治理网状资源 朋友圈 Timer
解释器模式(Interpreter Pattern 我想说“方言”,
所有解释权归我
实现特定语法解析 摩斯明码 Pattern、ExpressionParser
观察者模式(Observer Pattern) 到点就告诉我 解耦观察者与被观察者 闹钟 ContextLoaderListener
访问者模式(Visitor Pattern) 横看成岭侧成峰,
远近高下各不同
解耦数据结构和数据操作 KPI 考核 FileVisitor、BeanDefinitionVisitor

在《设计模式就该这样学》一书中,还有大量的 UML 图及易混同的设计模式比照案例剖析,也欢送大家关注。

在日常利用中,设计模式素来都不是单个设计模式独立应用的。在理论利用中,通常多个设计模式混合应用,你中有我,我中有你。下图残缺地形容了设计模式之间的混用关系,心愿对大家有所帮忙。

本文打算 1 个月(即 2021 年 11 月 31 日前)连载结束,请小伙伴们继续关注本文更新,大家能够先关注和珍藏本文,感谢您的反对!下一个连载专题预报《Spring 外围原理与源码剖析》。

本文为“Tom 弹架构”原创,转载请注明出处。技术在于分享,我分享我高兴!
如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源。关注微信公众号『Tom 弹架构』可获取更多技术干货!

退出移动版