写点什么

花了 30 天才肝出来,史上最全面 Java 设计模式总结,看完再也不会忘

作者:Tom弹架构
  • 2021 年 11 月 26 日
  • 本文字数:4001 字

    阅读完需:约 13 分钟

本文所有内容均节选自《设计模式就该这样学》


序言


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 的《设计模式》来编写的。


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

本文是我对“圣经”实践的精华总结,全文内容节选自《设计模式就该这样学》,这是一本可以真正能够落地的“设计模式”之书,也是目前唯一一本结合框架源码如何落地“设计模式”这个角度来理解设计模式的书。本文也将会结合 JDK、Spring、MyBatis、Tomcat、Netty 等经典框架源码展开对设计模式的分析。当然,本文还会结合我多年的“踩坑填坑”经验和“教学答疑”经验,用比“圣经”更深刻、更全面、更通俗、更生动、更有趣、更接地气的方式并且结合真实业务场景分析每种设计模式的优缺点,治愈“设计模式选择困难症”。选设计模式就像相亲选对象,一旦做好了接受 TA 缺点的准备,那 TA 就一定属于你。所以,本文对于日常开发而言更具有指导意义。


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


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


以下是根据本人的个人经验,对设计模式使用频率的总结,不可作为学术依据,仅供大家参考。因为设计模式的选择还是要依赖具体的业务场景的,每个人接触的业务领域都不一样,自然设计模式的选择也会不一样。


1.1 创建型设计模式


如下图所示,创建型设计模式中使用频率由高到低依次为工厂方法模式、抽象工厂模式、建造者模式、单例模式、原型模式。原型模式一般都有现成的工具类,自己造轮子的情况比较少。



1.2 结构型设计模式


如下图所示,结构型设计模式中使用频率由高到低依次为适配器模式、装饰器模式、代理模式、门面模式、组合模式、享元模式、桥接模式。其中桥接模式一般都有现成的工具类,自己造轮子的情况比较少。



1.3 行为型设计模式


如下图所示,行为型设计模式中使用频率由高到低依次为策略模式、观察者模式、责任链模式、解释器模式、模板方法模式、迭代器模式、中介者模式、命令模式、访问者模式、备忘录模式、状态模式。其中,观察者模式、解释器模式、迭代器模式、中介者模式、命令模式、访问者模式、备忘录模式一般都有现成的工具类,自己造轮子的情况比较少。



下面根据本人多年研究设计模式的经验总结,将压箱干货首次全网发布。如果本文对您有帮助一定要收藏,也欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注『 Tom 弹架构 』可获取更多技术干货!


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


Tom弹架构:为什么一定要学习设计模式 2021/10/29 已更新


3 七大架构设计原则篇


Tom弹架构:开闭原则(Open-Closed Principle,OCP) 2021/10/21 已更新

Tom弹架构:依赖倒置原则(Dependence Inversion Principle,DIP) 2021/10/22 已更新

Tom弹架构:单一职责原则(Simple Responsibility Principle,SRP)2021/10/23 已更新

Tom弹架构:接口隔离原则(Interface Segregation Principle,ISP) 2021/10/24 已更新

Tom弹架构:迪米特法则(Law of Demeter,LoD) 2021/10/25 已更新

Tom弹架构:里氏替换原则(Liskov Substitution Principle,LSP) 2021/10/26 已更新

Tom弹架构:合成复用原则(Composite/Aggregate Reuse Principle,CARP) 2021/10/27 已更新


目录仅代表更新计划,因精力分配原因不一定按顺序目录顺序连载,计划 1 个月(即 2021 年 11 月 31 日前)连载完毕,请小伙伴们持续关注本文更新,大家可以先关注和收藏本文或者关注『 Tom 弹架构 』更新通知,感谢您的支持!


4 创建型设计模式


Tom弹架构:简单工厂模式(Simple Factory Pattern) >> 彻底说透简单工厂那些你没有关注过的细节 2021/11/10 已更新

Tom弹架构:工厂方法模式(Factory Method Pattern) >> 全面通透深入剖析工厂方法模式 2011/11/11 已更新

Tom弹架构:抽象工厂模式(Abstract Factory Pattern)>> 手写数据库连接池,让抽象工厂不再抽象 2021/11/12 已更新

Tom弹架构:单例模式(Singleton Pattern)>> 这9个单例被破坏的事故现场,你遇到过几个? 2021/10/26 已更新

Tom弹架构:原型模式(Prototype Pattern)>> 一文读懂深克隆与浅克隆的关系 2021/11/01 已更新

Tom弹架构:建造者模式(Builder Pattern)>> 用建造者模式实现一个防SQL注入的ORM框架 2021/10/26 已更新


5 结构型设计模式


Tom弹架构:代理模式(Proxy Pattern)>> 从没有人将代理模式分析得如此透彻 2021/10/27 已更新

Tom弹架构:门面模式(Facade Pattern)>> 原来你不知道自己每天都在用门面模式 2021/11/13 已更新

Tom弹架构:装饰器模式(Decorator Pattern)>> 趣谈装饰器模式,让你一辈子不会忘 2021/11/01 已更新

Tom弹架构:享元模式(Flyweight Pattern)>> 就因为把 int 改成 Integer,第 2 天被辞了 2021/11/01 已更新

Tom弹架构:组合模式(Composite Pattern)>> 没有性能瓶颈的无限级菜单树应该这样设计 2021/11/04 已更新

Tom弹架构:适配器模式(Adapter Pattern)>> 如何快速搞定第三方登录且易扩展? 2021/11/03 已更新

Tom弹架构:桥接模式(Bridge Pattern)>> 使用桥接模式设计复杂的消息系统 2021/11/07 已更新


6 行为型设计模式


Tom弹架构:委派模式(Delegate Pattern)>> 你以为委派模式很神秘,其实你每天都在用 2021/11/09 已更新

Tom弹架构:桥接模式(Bridge Pattern)>> 使用桥接模式设计复杂的消息系统 2021/11/07 已更新

Tom弹架构:策略模式(Strategy Pattern)>> 使用策略模式重构电商折扣和支付场景 2021/11/05 已更新

Tom弹架构:责任链模式(Chain of Responsibility Pattern)>> 这才是责任链模式的优雅使用方式 2021/10/27 已更新

Tom弹架构:迭代器模式(Iterator Pattern)>> 手写自定义迭代器,秒懂迭代器底层原理 2021/11/15 已更新

Tom弹架构:命令模式(Command Pattern)>> 使用命令模式重构播放器控制条 2021/11/22 已更新

Tom弹架构:状态模式(State Pattern)>> 彻底搞懂 Spring 状态机原理,实现订单与物流解耦 2021/11/16 已更新

Tom弹架构:备忘录模式(Memento Pattern)>> 100 行代码,轻松搞定文本编辑器中草稿箱 2021/11/23 已更新

Tom弹架构:中介者模式(Mediator Pattern)>> 微信和 QQ 这么多群,该如何管理好友关系? 2021/11/24 已更新

Tom弹架构:解释器模式(Interpreter Pattern)>> 这个无敌设计,可以解析并运算任意数学表达式 2021/11/17 已更新

Tom弹架构:观察者模式(Observer Pattern)>> 基于 Guava API 实现异步通知和事件回调 2021/11/17 已更新

Tom弹架构:访问者模式(Visitor Pattern) >> 彻底搞懂访问者模式的静态、动态和伪动态分派 2021/11/24 已更新


7 新设计模式


Tom弹架构:对象池模式(Object Pool Pattern) 2021/11/25 已更新

Tom弹架构:规格模式(Specification Pattern) 2021/11/25 已更新

Tom弹架构:空对象模式(Null Object Pattern) 2021/11/25 已更新

Tom弹架构:雇工模式(Employee Pattern) 2021/11/25 已更新


8 一句话归纳设计模式


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



不管是面试也好,还是日常开发也好,相信大家都已经胸有成竹、信心满满了。但是从笔者的架构经验和教学经验总结来看,还有很多小伙伴对一些设计模式经常混淆难懂。以下内容将是我对设计模式的最精华总结,收集了我在教学过程中很多来自学员的疑问,对各种容易混淆的设计模式进行比较,并总结整理了以下内容,希望帮助大家在以后的设计选型中能够披荆斩棘,如履平地。如果你在阅读本书之前,对设计模式较为熟悉,本章内容可以帮助你巩固加深理解。

9 创建型设计模式对比

9.1 工厂方法模式与抽象工厂模式对比

9.2 简单工厂模式与单例模式对比

9.3 简单工厂模式与建造者模式对比

10 结构型设计模式对比

10.1 装饰器模式与代理模式对比

10.2 装饰器模式与门面模式对比

10.3 装饰器模式与适配器模式对比

10.4 适配器模式与代理模式对比

11 行为型设计模式对比

11.1 策略模式与模板方法模式对比

11.2 策略模式与命令模式对比

11.3 策略模式与委派模式对比

11.4 桥接模式与适配器模式对比

11.5 桥接模式与组合模式对比

12 跨类综合对比

12.1 享元模式与容器式单例模式对比

12.2 建造者模式与装饰器模式对比

12.3 策略模式与简单工厂模式对比

12.4 策略模式与适配器模式对比

12.5 中介者模式与适配器模式对比

12.6 中介者模式与代理模式对比

12.7 中介者模式与桥接模式对比

12.8 桥接模式与命令模式对比

12.9 委派模式与门面模式对比

12.10 委派模式与代理模式对比


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


在日常应用中,设计模式从来都不是单个设计模式独立使用的。在实际应用中,通常多个设计模式混合使用,你中有我,我中有你。下图完整地描述了设计模式之间的混用关系,希望对大家有所帮助。



大家可以先关注和收藏本文,感谢您的支持!关注微信公众号『 Tom 弹架构 』回复“设计模式”可获取完整源码。


本文为“Tom 弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!

如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注微信公众号『 Tom 弹架构 』可获取更多技术干货!


发布于: 4 小时前阅读数: 12
用户头像

Tom弹架构

关注

不只做一个技术者,更要做一个思考者 2021.10.22 加入

畅销书作者,代表作品:《Spring 5核心原理》、《Netty 4核心原理》、《设计模式就该这样学》

评论

发布
暂无评论
花了30天才肝出来,史上最全面Java设计模式总结,看完再也不会忘