23种设计模式之分类总结

关于设计模式的学习要告一段落了,学习的这一路上,也收到了不少小伙伴的留言,以及点赞给了我莫大的鼓励,我在这里谢谢大家的鼓励。。。

我会再接再厉,嘿嘿。。。

以上的话虽是真心话,但是总有点。。。反正就是大家多多点赞,以及分享,毕竟分享也想要一丢丢鼓励嘛。。。

我认为我的要求一点都不过分。。。 😄😄😄😄😄😄

如果文章有问题,有错误,也请大家多多指点,相互学习

文章目录

什么是设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

更多关于设计模式的文章请看:

简单说

  • 模式:在某些场景下,针对某类问题的某种通用的解决方案。
  • 场景:项目所在的环境
  • 问题:约束条件,项目目标等
  • 解决方案:通用、可复用的设计,解决约束达到目标。

分类概括

总体来说设计模式分为三大类:

  • 第一类创建型模式
    对象实例化的模式,创建型模式用于解耦对象的实例化过程。
    共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  • 第二类结构型模式
    把类或对象结合在一起形成一个更大的结构。
    共七种:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  • 第三类行为型模式
    类和对象如何交互,及划分责任和算法。
    *共十一种:策略模式、模板模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

23种设计模式之分类总结

; 分类细说

创建型模式

单例模式

详情请看历史文章——23种设计模式之单例模式

单例模式用来创建全局唯一的对象。一个类只允许创建一个对象,这个类就是一个单例类。单例有几种经典实现方式,分别为:饿汉式、懒汉式、双重检测、静态内部类、枚举。

简单工厂

详情请看历史文章——23种设计模式之工厂模式

23种设计模式之分类总结
定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的”创建与使用相分离”的特点。

常用场景:需要在一堆产品中选择其中一个产品

按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是 简单工厂模式工厂方法模式抽象工厂模式

设计原则

  • 遵循单一职责
  • 违背开闭原则(生成不同对象,需要实现不同的工厂类,扩展性不好)

; 工厂方法模式

详情请看历史文章——23种设计模式之工厂模式

23种设计模式之分类总结
工厂方法模式又叫虚拟构造子模式或者多态性共存模式,工厂模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。

常用场景:一种场景是希望工厂与产品的种类对客户端保持透明,给客户端提供一致的操作,另外一种是不同的工厂和产品可以提供客户端不同的服务或功能

设计原则

  • 单一指责
  • 依赖倒置
  • 开闭原则

; 抽象工厂

详情请看历史文章——23种设计模式之工厂模式

23种设计模式之分类总结
工厂方法模式与抽象工厂模式最大的区别在于,在工厂方法模式中,工厂创造的是一个产品,而在抽象工厂模式中,工厂创造的是一个产品族。

常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类

设计原则

  • 单一指责
  • 依赖倒置
  • 开闭原则

; 建造者模式

详情请看历史文章——23种设计模式之建造者模式

23种设计模式之分类总结
建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂

设计原则:

  • 遵循单一职责
  • 开闭原则

; 原型模式

详情请看历史文章——23种设计模式之原型模式

23种设计模式之分类总结

通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象

常用场景:需要在运行时动态的创建指定实例种类的对象,或是需要复用其状态

; 结构模式

代理模式

详情请看历史文章——23种设计模式之代理模式

23种设计模式之分类总结
代理模式给某一个对象提供一个代理对象,并由代理对象控制原有对象的引用

常用场景:需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,假设这些类有一致的接口,可使用JDK的动态代理,否则可使用cglib

; 适配器模式

详情请看历史文章——23种设计模式之适配器模式

23种设计模式之分类总结
把一个类的接口变换成客户端所期待的另一种结构,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作

常用场景:需要使用一个类的功能,但是该类的接口不符合使用场合要求的接口,可使用定制适配器,又或者是有一个接口定义的行为过多,则可以定义一个缺省适配器,让子类选择性的覆盖适配器的方法

设计原则:

  • 遵循开闭原则

; 装饰者模式

详情请看历史文章——23种设计模式之装饰者模式

23种设计模式之分类总结
装饰器模式又名包装模式,装饰器模式用以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案

常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加

设计原则

  • 遵循迪米特
  • 单一职责
  • 开闭原则
  • 破坏里氏替换

; 桥接模式

详情请看历史文章——23种设计模式之桥接模式

23种设计模式之分类总结
业务抽象角色引用业务实现角色,或者说业务抽象角色的部分实现是由业务实现角色实现完成的。

常用场景:一个对象有多个维度的变化,需要将这些维度抽离出来,让其独立变化

设计原则

  • 遵循单一职责
  • 迪米特
  • 开闭原则

; 组合模式

详情请看历史文章——23种设计模式之组合模式

23种设计模式之分类总结

有时又叫做部分-整体模式。组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待

常用场景:当有一个结构可以组合成树形结构,且需要向客户端提供一致的操作接口,使得客户端操作忽略简单元素与复杂元素

设计原则

  • 遵循依赖倒置
  • 开闭原则
  • 破坏接口隔离

; 享元模式

详情请看历史文章——23种设计模式之享元模式

23种设计模式之分类总结
享元模式以共享方式高效的支持大量的细粒度对象

常用场景:一些状态相同的对象被大量的重复使用

; 外观模式

详情请看历史文章——23种设计模式之外观模式

23种设计模式之分类总结
外部与子系统的通信(交互)必须通过统一的门面对象进行

常用场景:一个子系统需要对外提供服务

设计原则

  • 遵循迪米特

; 行为型模式

观察者模式

详情请看历史文章——23种设计模式之观察者模式

23种设计模式之分类总结
又叫 _发布-订阅_模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察这对象,使它们能够自动更新自己

常用场景:需要将观察者与被观察者解耦或者是观察者的种类不确定

设计原则

  • 遵循迪米特
  • 开闭原则

; 模板模式

详情请看历史文章——23种设计模式之模板模式

23种设计模式之分类总结
准备一个抽象类,将部分逻辑以抽象方法形式让子类去实现,不同哦能的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意

常用场景:一批子类的功能有可提取的公共算法骨架

设计原则:破坏里氏替换

; 命令模式

详情请看历史文章——23种设计模式之命令模式

23种设计模式之分类总结

命令模式把一个请求或在操作封装到一个对象中,命令模式允许系统使用不同的 请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能

常用场景:行为的请求者与行为的处理者耦合度过高

设计原则

  • 遵循迪米特
  • 开闭原则

; 状态模式

详情请看历史文章——23种设计模式之状态模式(State)

23种设计模式之分类总结
状态模式允许一个对象在其内部状态改变的时候改变其行为,这个对象唉看上去就像是改变了它的类一样

常用场景:一个对象在多个状态下行为不同,且这些状态可互相转换

设计原则

  • 遵循单一职责
  • 依赖倒置
  • 开闭原则

; 责任链模式

详情请看历史文章——23种设计模式之责任链模式

23种设计模式之分类总结
很多对象是由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象囧丁处理此请求,发出这个请求的客户端并不知道链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。

常用场景:一个请求的处理需要多个对象当中的一个或几个协作处理

设计原则:遵循迪米特

; 解释器模式

详情请看历史文章——23种设计模式之解释器模式(Interpreter)

23种设计模式之分类总结
解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。

常用场景:有一种语言被频繁的使用

设计原则:遵循单一职责

; 中介者模式

详情请看历史文章——23种设计模式之中介者模式(Mediator)

23种设计模式之分类总结
中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合

常用场景:一个系列的对象交互关系十分复杂

设计原则:遵循迪米特,破坏单一职责

; 访问者模式

详情请看历史文章——23种设计模式之访问者模式(Visitor Pattern)

23种设计模式之分类总结
访问者模式的目地是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变

常用场景:作用于一个数据结构之上的操作经常变

设计原则:遵循倾斜的开闭原则

; 策略模式

详情请看历史文章——23种设计模式之策略模式

23种设计模式之分类总结
其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。

常用场景:算法或者策略需要经常替换

设计原则

  • 遵循单一职责
  • 依赖倒置
  • 迪米特
  • 开闭原则

; 备忘录模式

详情请看历史文章——23种设计模式之备忘录模式

23种设计模式之分类总结
又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装性的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来适合的时候把这个对象还原到存储起来的状态。

常用场景:需要在对象的外部保存该对象的内部状态

设计原则

  • 遵循迪米特
  • 开闭原则

; 迭代器模式

详情请看历史文章——23种设计模式之迭代器模式

23种设计模式之分类总结
迭代器模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象。

常用场景:需要迭代访问一个聚合对象中的各个元素,且不暴露该聚合对象内部的表示

设计原则:遵循迪米特

; 总结

每个设计模式都应该由两部分组成:一是应用场景,即这个模式可以解决哪类问题;二是解决方案,即这个模式的设计思路和具体的代码实现。不过代码实现并不是模式必须包含的。如果单纯地只关注解决方案这一部分,甚至只关注代码实现,就会产生大部分模式看起来都很相似的错觉。实际上,设计模式之间的主要区别还是在于设计意图,也就是应用场景。

我的理解在开发的道路上必须谨记以下几句话

  • 设计的初衷是提高代码质量
  • 设计的过程是先有问题后又方案
  • 持续重构能有效避免过度设计
  • 不要脱离具体的场景去谈设计

更多请看。。。
🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽
本文作者:Java技术债务
原文链接:https://www.cuizb.top/myblog/article/1661776114
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。
🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽🔽

23种设计模式之分类总结
JVM内存泄漏和内存溢出的原因
JVM常用监控工具解释以及使用
Redis 常见面试题(一)
ClickHouse之MaterializeMySQL引擎(十)
三种实现分布式锁的实现与区别
线程池的理解以及使用
最近面试BAT,整理一份面试资料,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。想获取吗?如果你想提升自己,并且想和优秀的人一起进步,感兴趣的朋友,可以在扫码关注下方公众号。资料在公众号里静静的躺着呢。。。
  • 喜欢就收藏
  • 认同就点赞
  • 支持就关注
  • *疑问就评论

一键四连,你的offer也四连

Original: https://www.cnblogs.com/cuizb/p/16709522.html
Author: Java技术债务
Title: 23种设计模式之分类总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713355/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球