本文节选自《设计模式就该这样学》
本文自 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 弹架构』可获取更多技术干货!