23 种设计模式分类与简述

本文深入讲解设计模式的分类与应用场景,包括创建型、结构型和行为型设计模式,旨在帮助开发者提升代码质量和软件架构能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在程序开发中,设计模式是很容易被开发者所忽视的知识点。初级开发者重点在实战,而且段位不高,有些设计模式的精髓很难理解。但是中级以上开发者,或者对自己代码要求比较高,想要写出更有拓展性,更具维护性的代码。设计模式的学习就不可忽视。它能给予你一些特殊场景的解决方案,并引导你写出更高质量的代码。

 

设计模式分类

一、根据作用范围划分

根据设计模式作用范围,即主要作用在类上还是对象上来划分,可将设计模式分为类模式对象模式两种。

类模式:用来处理类与类之间的关系,通过继承而来,这些关系是静态的,编译时便确定下来。在 23 种设计模式中有工厂方法模式、适配器模式、模板方法模式和解释器模式一共 4 种属于类模式。

对象模式:用来处理对象与对象之间的关系,通过组合或者聚合来实现的。这些关系是动态的,在运行时可以变化。除了以上 4 种类模式以外的其他 19 种设计模式都属于对象模式。

 

二. 根据目的划分

根据设计模式的目的,即设计模式是用来完成什么工作来划分,可将设计模式分为创建型设计模式结构型设计模式行为型设计模式

创建型设计模式:创建型设计模式指的是将对象的创建和使用分离。属于创建型设计模式的有单例模式、原型模式、工厂模式、抽象工厂模式以及建造者模式一共 5 种。

1. 单例模式:简单的说就是一个类只能有一个实例。单例又分为懒汉式单例和饿汉式单例。懒汉式单例是类加载的时候没有创建,使用的时候才创建。饿汉式单例是类一旦加载,实例就已经被创建了。

2. 原型模式:用一个已经创建的实例作为原型,通过复制该原型对象来创建许多和原型相同或相似的新对象。

3. 工厂方法模式:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作放到具体子工厂去实现。

4. 抽象工厂模式:提供一组相关或相互依赖对象的接口。抽象工厂模式是工厂方法模式的升级版,工厂方法模式只生产一类产品。而抽象工厂模式可生产多种类型的产品。

5. 建造者模式:将一个复杂对象的构造和它的表现分离。使同样的构建过程可以创建不同的表示。将复杂的对象分解成一个个简单的对象,然后一步步构建而成。将变与不变分离,产品的组成部分是不变的,但每一部分是可以灵活选择的。

 

结构型设计模式:结构型设计模式指的是如何将类与对象按照某个组合组成更大的结构。属于结构型设计模式的是有代理模式、适配器模式、装饰者模式、桥接模式、外观模式、享元模式以及组合模式一共 7 种。

6. 代理模式:A与B之间的通信可借助C来完成而达到更好的效果。

7. 适配器模式:调用不同对象的统一接口,如果是外部提供的不同名的接口,就需要适配器来转换。

8. 装饰模式:在不改变对象的基础上,给对象增加格外的功能。

9. 桥接模式:将抽象与实现分离,使他们可以独立化。使用组合关系替代继承关系,降低抽象和实现的耦合。

10. 外观模式:为多个复杂的子系统提供一个统一的接口,使子系统更容易被访问到,降低系统之间的耦合度。

11. 享元模式:享元模式是一种性能优化方案,flyweight 是轻量级,蝇量级的意思。享元模式的核心是利用共享技术有效支持大量类似的颗粒度对象,从而尽可能减少对象的创建,节省内存空间。

12. 组合模式:组合模式又被称为部分-整体模式。它是将对象组合成一个树形结构的模式,使用户对单个对象和组合对象具有一致的访问性。

 

行为型设计模式:行为型设计模式指的是类与对象如何协作来完成单个对象无法单独完成的任务。属于行为型设计模式的有模板方法模式、策略模式、命令模式、责任链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式一共 11 种。

13. 模板方法模式:模版方法是对封装的一种改造,定义一个抽象的模板,把模板的具体实现放到子类中去完成。即把变化的逻辑增加到子类中,而不改动父类。

14. 策略模式:策略模式就是一种封装,定义一系列算法,并将每个算法封装起来,使它们可以相互替换。算法的变化不会影响使用算法的客户。

15. 命令模式:命令模式指的是执行某些特定事情的指令,或者说实现特定功能的接口约定。

16. 责任链模式:将一系列可以处理请求的对象组成一条链。

17. 状态模式:将某个状态和该状态下的行为抽象出独立的模块。

18. 观察者模式:观察者模式,也叫订阅发布模式,指可以预先订阅事件,在需要的时候进行发布。

19. 中介者模式:提供一个中介者来将对象与对象之间多对多的关系变成一对多的关系,以此来解耦对象的关联性。

20. 迭代器模式:提供一种方法依次访问一个集合对象中的每个元素,并不关心对象的内部结合。

21.访问者模式:将对数据的操作和数据结构进行分离。将对数据中各元素的操作封装成独立的类。使其在不改变数据结构的前提下可以拓展对数据新的操作。

22.备忘录模式:在不破坏对象封装性的前提下,捕捉并保存一个对象的内部状态,以便当需要的时候可以恢复到最初状态。

23. 解释器模式:给分析对象定义一个语言,并定义该语言的文法表示。再设计一个解释器来解释语句中的句子。用编译语言的方式来分析应用中的实例。

 

目 录 序言 前言 读者指南 第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象的实现 10 1.6.5 运用复用机制 13 1.6.6 关联运行时刻和编译时刻的 结构 15 1.6.7 设计应支持变化 16 1.7 怎样选择设计模式 19 1.8 怎样使用设计模式 20 第2章 实例研究:设计一个文档编 辑器 22 2.1 设计问题 23 2.2 文档结构 23 2.2.1 递归组合 24 2.2.2 图元 25 2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor和Composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 Monoglyph 30 2.4.3 Decorator 模式 32 2.5 支持多种视感标准 32 2.5.1 对象创建的抽象 32 2.5.2 工厂类和产品类 33 2.5.3 Abstract Factory模式 35 2.6 支持多种窗口系统 35 2.6.1 我们是否可以使用Abstract Factory 模式 35 2.6.2 封装实现依赖关系 35 2.6.3 Window和WindowImp 37 2.6.4 Bridge 模式 40 2.7 用户操作 40 2.7.1 封装一个请求 41 2.7.2 Command 类及其子类 41 2.7.3 撤消和重做 42 2.7.4 命令历史记录 42 2.7.5 Command 模式 44 2.8 拼写检查和断字处理 44 2.8.1 访问分散的信息 44 2.8.2 封装访问和遍历 45 2.8.3 Iterator类及其子类 46 2.8.4 Iterator模式 48 2.8.5 遍历和遍历过程中的动作 48 2.8.6 封装分析 48 2.8.7 Visitor 类及其子类 51 2.8.8 Visitor 模式 52 2.9 小结 53 第3章 创建型模式 54 3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型 模式 92 4.2 Bridge(桥接)—对象结构型 模式 100 4.3 Composite(组成)—对象结构型 模式 107 4.4 Decorator(装饰)—对象结构型 模式 115 4.5 FACADE(外观)—对象结构型 模式 121 4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 AdapterBridge 144 4.8.2 Composite、DecoratorProxy 145 第5章 行为模式 147 5.1 CHAIN OF RESPONSIBIL ITY(职责链) —对象行为型模式 147 5.2 COMMAND(命令)—对象行为型 模式 154 5.3 INTERPRETER(解释器)—类行为型 模式 162 5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第6章 结论 232 6.1 设计模式将带来什么 232 6.2 一套通用的设计词汇 232 6.3 书写文档和学习的辅助手段 232 6.4 现有方法的一种补充 233 6.5 重构的目标 233 6.6 本书简史 234 6.7 模式界 235 6.8 Alexander 的模式语言 235 6.9 软件中的模式 236 6.10 邀请参 237 6.11 临别感想 237 附录A 词汇表 238 附录B 图示符号指南 241 附录C 基本类 244 参考文献 249
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值