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 | 责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者 |
恭喜你,看到了最后,彩蛋送给你,ヾ(^∀^)ノ
创五构七行十一,二三经典记心底
原建工抽单 ,
桥代外享适组装 (桥代理外想试组装)
迭解策观命中状,责备模访 (爹姐侧观命中撞,责备模仿)