GoF(Gang of Four)设计模式是由四位计算机科学家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的设计模式
目录
[一、创建型模式(Creational Patterns)](#一、创建型模式(Creational Patterns))
[工厂方法模式(Factory Method)](#工厂方法模式(Factory Method))
[抽象工厂模式(Abstract Factory)](#抽象工厂模式(Abstract Factory))
[二、结构型模式(Structural Patterns)](#二、结构型模式(Structural Patterns))
[三、行为型模式(Behavioral Patterns)](#三、行为型模式(Behavioral Patterns))
[责任链模式(Chain of Responsibility)](#责任链模式(Chain of Responsibility))
[模板方法模式(Template Method)](#模板方法模式(Template Method))
一、创建型模式(Creational Patterns)
关注对象的创建机制,降低对象创建的复杂性
单例模式(Singleton)
确保一个类只有一个实例,并提供全局访问点。
示例:数据库连接池、全局配置对象。
工厂方法模式(Factory Method)
定义一个创建对象的接口,但由子类决定实例化哪个类。
示例:日志记录器(文件日志 vs 数据库日志)。
抽象工厂模式(Abstract Factory)
创建一组相关或依赖对象的家族,而不指定具体类。
示例:跨平台的 UI 组件(Windows/Mac 的按钮、文本框)。
建造者模式(Builder)
分步骤构建复杂对象,分离构造过程与表示。
示例:生成不同格式的文档(HTML/PDF)。
原型模式(Prototype)
通过复制现有对象来创建新对象,避免重复初始化。
示例:Java 的 Cloneable 接口。
二、结构型模式(Structural Patterns)
关注类和对象的组合方式,形成更大的结构
适配器模式(Adapter)
使不兼容的接口能够协同工作。
示例:将旧系统的接口适配到新系统。
装饰器模式(Decorator)
动态地为对象添加额外职责,避免继承导致的类爆炸。
示例:Java I/O 流(BufferedInputStream 装饰 FileInputStream)。
代理模式(Proxy)
为其他对象提供一种代理以控制访问。
示例:远程代理(RPC)、虚拟代理(延迟加载图片)。
外观模式(Facade)
为复杂子系统提供一个统一的简化接口。
示例:一键启动电脑(封装 CPU、内存、硬盘的启动过程)。
桥接模式(Bridge)
将抽象与实现分离,使它们可以独立变化。
示例:不同形状(圆形/方形)和颜色(红/蓝)的组合。
组合模式(Composite)
将对象组合成树形结构以表示"部分-整体"层次。
示例:文件系统(文件+文件夹的统一处理)。
享元模式(Flyweight)
通过共享技术高效地支持大量细粒度对象。
示例:游戏中的重复贴图(如森林中的树木)。
三、行为型模式(Behavioral Patterns)
关注对象间的通信和职责分配
策略模式(Strategy)
定义一系列算法,封装它们并使它们可互换。
示例:排序算法(快速排序、冒泡排序的动态切换)。
观察者模式(Observer)
定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者自动收到通知。
示例:事件监听、消息队列。
命令模式(Command)
将请求封装为对象,以便支持撤销、队列等操作。
示例:GUI 的按钮操作、事务管理。
状态模式(State)
允许对象在内部状态改变时改变其行为。
示例:电梯的不同状态(运行/停止/故障)。
责任链模式(Chain of Responsibility)
将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
示例:审批流程(经理→总监→CEO)。
模板方法模式(Template Method)
定义算法的骨架,将某些步骤延迟到子类实现。
示例:冲泡饮料(咖啡 vs 茶的通用步骤)。
迭代器模式(Iterator)
提供一种方法顺序访问聚合对象的元素,而不暴露其内部表示。
示例:Java 的 Iterator 接口。
中介者模式(Mediator)
用一个中介对象来封装一系列对象之间的交互。
示例:聊天室(用户不直接通信,通过服务器中转)。
备忘录模式(Memento)
捕获并外部化对象的内部状态,以便以后恢复。
示例:游戏存档、撤销操作。
访问者模式(Visitor)
将算法与对象结构分离,便于新增操作而不修改类。
示例:对不同类型的文件(PDF/Word)执行格式检查。
解释器模式(Interpreter)
定义语言的文法,并解释该语言中的句子。
示例:SQL 解析、正则表达式引擎。