GoF23种设计模式
GoF23种设计模式(GoF指Gang of Four,四人组,《Design Patterns: Elements of Reusable Object-Oriented Software》的四位作者),按照核心功能和应用场景可分为三大类:创建型模式、结构型模式和行为型模式。

一、创建型模式
核心意图:封装对象创建过程,解耦"创建"与"使用",提高代码灵活性。
| 模式名称 | 核心功能 | 典型应用场景 |
|---|---|---|
| 简单工厂模式 (Simple Factory) | 一个 工厂类根据参数 创建不同产品(非GoF标准) | 工具类创建 |
| 1.工厂方法模式(Factory Method) | 抽象工厂接口,子类决定实例化哪个产品 | 日志框架、数据库驱动 |
| 2.抽象工厂模式(Abstract Factory)) | 创建一系列相关/依赖的产品族 | 跨平台UI库、Spring的BeanFactory |
| 3.建造者模式(Builder) | 分步构建复杂对象、分离构建与表示 | 复杂对象创建(如StringBuilder) |
| 4.原型模式(Prototype) | 通过复制现有实例创建新对象(避免重复初始化) | 大对象复用(如缓存对象克隆 |
| 5.单例模式(Singleton) | 确保一个类只有一个实例,提供全局访问点 | 配置管理器、线程池、数据库连接池 |
二、结构型模式
核心意图:处理类\对象的组合关系,优化代码结构,提高扩展性和复用性。
| 模式名称 | 核心功能 | 典型应用场景 |
|---|---|---|
| 6.适配器模式(Adapter) | 转换一个类的接口为客户端期望的接口(兼容旧系统) | 第三方库适配 、接口版本兼容(如Java的InputStreamReader) |
| 7.桥接模式 (bridge) | 分离抽象与实现,使二者可独立扩展 | 多维度产品扩展(如手机品牌+操作系统) |
| 8.组合模式(Composite) | 树形结构中统一处理单个对象和组合对象 | 文件夹/文件结构、UI组件树(如Swing组件) |
| 9.装饰器模式(decorator) | 动态给对象添加额外功能(不改变原类结构) | IO流包装(如BufferReader)、Spring AOP增强 |
| 10.外观模式(Facade) | 为复杂子系统提供统一的简化接口 | 框架入口(如Spring的ApplicationContest),API网关 |
| 11.享元模式(Flyweight) | 共享细粒度对象、减少内存消耗 | 常量池(String常量池)、缓存池(如数据库连接池) |
| 12.代理模式 (Proxy) | 为对象提供代理,控制访问(如权限、缓存) | 远程代理(RPC),Spring AOP代理、缓存代理 |
三、行为型模式
核心意图:描述类或对象之间的交互行为(通信、职责分配),优化代码协作逻辑 。
| 模式名称 | 核心功能 | 典型应用场景 |
|---|---|---|
| 13.责任链模式(Chain of Responsibility) | 多个对象链式处理请求,直到有对象处理 | 请求审批流程、日志级别处理 |
| 14.命令模式(Conmmand) | 将请求封装为对象,支持参数化,队列化执行 | 命令队列、撤销/重做功能 |
| 15.解释器模式(Interpreter) | 定义语言语法规则,解析特定格式的表达式 | 表达式解析 |
| 16.迭代器模式(Iterator) | 提供统一 遍历集合的接口,隐藏集合内部结构 | Java集合的Iterator接口,foreach循环 |
| 17.中介者模式(Mediator) | 封装对象间的复杂交互,通过中介者统一协调 | 聊天室、GUI组件通信 |
| 18.备忘录模式(Memento) | 保存对象状态,以便后续恢复(不暴露内部结构) | 撤销功能(如文本编辑器的 历史记录)、序列化备份 |
| 19.观察者模式(Observer) | 一对多依赖,一个对象变化时通知所有依赖对象 | 事件监听,消息订阅 |
| 20.状态模式(State) | 对象状态变化时,动态改变其行为(状态封装) | 订单状态流转、线程状态管理 |
| 21.策略模式(Strategy) | 定义多个算法,动态选择使用(替换if/else) | 排序算法选择,支付方式切换,日志输出策略 |
| 22.模板方法模式(Template Method) | 父类定义算法骨架,子类实现具体步骤 | 框架模板、回调函数 |
| 23.访问者模式(Visitor) | 分离对象数据结构与操作,动态扩展新操作 | 数据结构遍历+多操作(如XML/JSON解析,报表生成) |
-
高频使用模式
-
创建型:单例、工厂方法 、抽象工厂、建造者
-
结构型:适配器、装饰器、代理、外观
-
行为型:观察者、策略、模板方法、责任链
-
-
场景选择举例
-
需灵活创建对象:工厂方法、抽象工厂
-
需扩展对象功能:装饰器/代理/适配器
-
需优化对象交互:观察者/中介者/责任链
-
需简化 复杂逻辑:策略(替换if/else),外观(封装子系统)
-