23种设计模式全解析(GoF 设计模式)

GoF(四人帮) 将23种设计模式分为三大类创建型模式 (5种)、结构型模式 (7种)、行为型模式 (11种)。 每种模式包含:核心意图、适用场景、简单特点


一、创建型模式(5种)

核心目标 :解决对象创建问题,隐藏创建逻辑,统一/灵活生成对象。

1. 单例模式(Singleton)

  • 意图 :保证一个类仅有一个实例,并提供全局访问入口。

  • 场景:全局配置类、连接池、日志工具、缓存对象。

  • 特点:私有构造方法、静态实例、线程安全/饿汉/懒汉/枚举等多种实现。

2. 工厂方法模式(Factory Method)

  • 意图 :定义创建对象的抽象接口,由子类决定实例化哪一个类

  • 场景:同一产品族、扩展新产品无需修改原有代码。

  • 特点 :一个工厂对应一个产品,遵循开闭原则。

3. 抽象工厂模式(Abstract Factory)

  • 意图 :提供接口,创建一系列相关/相互依赖的对象(产品族)。

  • 场景:多系列产品(如不同品牌的整套家电、跨平台UI组件)。

  • 特点 :一个工厂生产一组产品,隔离产品族。

4. 建造者模式(Builder)

  • 意图 :分步构建复杂对象,分离构建与表示。

  • 场景:参数多、构造函数臃肿、对象属性可变(如实体类、配置、报文)。

  • 特点:链式调用、分步组装,可生成不同形态对象。

5. 原型模式(Prototype)

  • 意图 :通过复制已有对象(克隆) 创建新对象,而非 new。

  • 场景:对象创建成本高(初始化耗时)、大量相似对象。

  • 特点:浅克隆 / 深克隆,基于原型实例复制。


二、结构型模式(7种)

核心目标 :解决类/对象组合问题,灵活组装、扩展结构。

1. 适配器模式(Adapter)

  • 意图 :将一个类的接口转换成客户端期望的接口,解决接口不兼容。

  • 场景:老系统适配新接口、第三方接口兼容、新旧代码对接。

  • 分类:类适配器(继承)、对象适配器(组合,常用)。

2. 桥接模式(Bridge)

  • 意图 :将抽象与实现分离,两者可独立变化。

  • 场景:多层维度扩展(如形状+颜色、消息类型+发送渠道)。

  • 特点:避免类爆炸,多用组合而非继承。

3. 装饰器模式(Decorator)

  • 意图 :动态给对象添加额外功能,比继承更灵活。

  • 场景:IO流、权限增强、功能叠加(咖啡加配料、请求加过滤器)。

  • 特点:层层包装,原有类无需修改。

4. 组合模式(Composite)

  • 意图 :将对象组织成树形结构,统一对待单个对象和组合对象。

  • 场景:文件目录、组织架构、菜单树、权限树。

  • 特点:叶子节点 + 容器节点,一致调用接口。

5. 外观模式(Facade)

  • 意图 :提供一个统一高层接口,隐藏子系统复杂逻辑。

  • 场景:复杂模块入口、三方工具封装、简化调用链路。

  • 特点:门面类统一调用多个子类,降低调用复杂度。

6. 享元模式(Flyweight)

  • 意图复用细粒度对象,减少内存开销(对象池思想)。

  • 场景:大量重复对象(字符、字体、游戏NPC、连接池)。

  • 特点 :区分内部状态(共享)外部状态(独有)

7. 代理模式(Proxy)

  • 意图 :为目标对象提供代理,控制对原对象的访问。

  • 场景:远程调用、延迟加载、权限控制、AOP、日志/监控。

  • 分类:静态代理、动态代理(JDK/CGLIB)、虚拟代理、远程代理。


三、行为型模式(11种)

核心目标 :解决对象之间通信、职责分配、流程控制问题。

1. 责任链模式(Chain of Responsibility)

  • 意图 :多个对象依次处理请求,请求沿着链传递,直到被处理。

  • 场景:审批流程、过滤器、异常捕获、多级校验。

  • 特点:请求发送者与处理者解耦,可动态调整链路。

2. 命令模式(Command)

  • 意图 :将请求封装为对象,可排队、撤销、重做、日志。

  • 场景:遥控器操作、菜单命令、任务队列、事务回滚。

  • 特点:请求、执行、触发三方解耦。

3. 解释器模式(Interpreter)

  • 意图:定义语言文法,构建解释器解析表达式。

  • 场景:表达式计算、规则引擎、脚本解析、编译器。

  • 特点:适合简单语法,复杂语法不推荐。

4. 迭代器模式(Iterator)

  • 意图 :提供统一方式遍历聚合对象,不暴露内部结构。

  • 场景:各类集合遍历(Java Collection 底层就是迭代器)。

  • 特点:分离集合与遍历逻辑。

5. 中介者模式(Mediator)

  • 意图 :用中介对象解耦多个对象的直接交互。

  • 场景:多组件通信、聊天室、分布式消息中转、复杂模块交互。

  • 特点:所有对象只和中介通信,减少网状依赖。

6. 备忘录模式(Memento)

  • 意图 :捕获对象内部状态,保存快照、实现回滚

  • 场景:编辑器撤销/恢复、游戏存档、数据版本回退。

  • 特点:不破坏封装,保存历史状态。

7. 观察者模式(Observer)

  • 意图 :一对多依赖,主体变化,所有订阅者自动收到通知

  • 场景:事件监听、消息推送、发布订阅、GUI事件。

  • 别名:发布-订阅模式。

8. 状态模式(State)

  • 意图 :对象行为随状态改变而改变,将状态逻辑拆分到状态类。

  • 场景:订单状态、审批状态、电梯、游戏角色状态。

  • 特点:消除大量 if/else 状态判断。

9. 策略模式(Strategy)

  • 意图 :定义一系列算法,相互替换,算法独立变化。

  • 场景:多种计算规则、支付方式、排序算法、营销活动。

  • 特点:替换臃肿分支判断,算法可自由切换。

10. 模板方法模式(Template Method)

  • 意图 :定义算法固定骨架,将可变步骤延迟到子类实现。

  • 场景:通用流程框架、生命周期方法、框架基类。

  • 特点:父类定流程,子类实现细节,控制执行顺序。

11. 访问者模式(Visitor)

  • 意图 :在不修改类结构的前提下,为类新增操作

  • 场景:数据结构稳定、需要频繁新增操作(报表、数据统计)。

  • 特点:分离数据结构与数据操作,结构一变则改动巨大。


总结

分类 数量 模式列表
创建型 5 单例、工厂方法、抽象工厂、建造者、原型
结构型 7 适配器、桥接、装饰、组合、外观、享元、代理
行为型 11 责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者

恭喜你,看到了最后,彩蛋送给你,ヾ(^∀^)ノ

创五构七行十一,二三经典记心底

原建工抽单 ,

桥代外享适组装 (桥代理外想试组装)

迭解策观命中状,责备模访 (爹姐侧观命中撞,责备模仿)

相关推荐
阿坤带你走近大数据2 小时前
分别介绍下java主流的开发框架、设计模式与对应编程语言的高级特性
java·开发语言·设计模式
geovindu2 小时前
go: Coroutines Pattern
开发语言·后端·设计模式·golang·协程模式
Anastasiozzzz3 小时前
构建健壮软件系统的基石:深入解析面向对象设计七大原则
开发语言·javascript·设计模式·ecmascript
@insist1233 小时前
系统架构设计师-存储管理核心机制:页式、段式、段页式架构原理
架构·系统架构·软考·系统架构设计师·软件水平考试
@insist12318 小时前
系统架构设计师-操作系统进程管理核心知识点详解
架构·系统架构·软考·系统架构设计师·软件水平考试
qq_297574671 天前
设计模式系列文章(基础篇第19篇):中介者模式——封装交互关系,解耦网状依赖
设计模式·交互·中介者模式
AI大法师1 天前
老牌媒体怎么从“出版物更新”走到“品牌系统升级”
大数据·人工智能·设计模式·新媒体运营
野生技术架构师1 天前
Java 23 种设计模式:从踩坑到精通 —— 开篇及系列介绍
java·开发语言·设计模式
艾利克斯冰1 天前
Java设计模式-创建型模式(更新完成)
设计模式