GoF(Gang of Four)设计模式是由四位计算机科学家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的设计模式
目录
一、创建型模式(Creational Patterns)
单例模式(Singleton)
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
建造者模式(Builder)
原型模式(Prototype)
二、结构型模式(Structural Patterns)
适配器模式(Adapter)
装饰器模式(Decorator)
代理模式(Proxy)
外观模式(Facade)
桥接模式(Bridge)
组合模式(Composite)
享元模式(Flyweight)
三、行为型模式(Behavioral Patterns)
策略模式(Strategy)
观察者模式(Observer)
命令模式(Command)
状态模式(State)
责任链模式(Chain of Responsibility)
模板方法模式(Template Method)
迭代器模式(Iterator)
中介者模式(Mediator)
备忘录模式(Memento)
访问者模式(Visitor)
解释器模式(Interpreter)
一、创建型模式(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 解析、正则表达式引擎。