23种GoF设计模式

GoF(Gang of Four)设计模式是由四位计算机科学家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的设计模式

目录

[一、创建型模式(Creational Patterns)](#一、创建型模式(Creational Patterns))

单例模式(Singleton)

[工厂方法模式(Factory Method)](#工厂方法模式(Factory Method))

[抽象工厂模式(Abstract Factory)](#抽象工厂模式(Abstract Factory))

建造者模式(Builder)

原型模式(Prototype)

[二、结构型模式(Structural Patterns)](#二、结构型模式(Structural Patterns))

适配器模式(Adapter)

装饰器模式(Decorator)

代理模式(Proxy)

外观模式(Facade)

桥接模式(Bridge)

组合模式(Composite)

享元模式(Flyweight)

[三、行为型模式(Behavioral Patterns)](#三、行为型模式(Behavioral Patterns))

策略模式(Strategy)

观察者模式(Observer)

命令模式(Command)

状态模式(State)

[责任链模式(Chain of Responsibility)](#责任链模式(Chain of Responsibility))

[模板方法模式(Template Method)](#模板方法模式(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 解析、正则表达式引擎。

相关推荐
骊山道童5 小时前
设计模式-外观模式
设计模式·外观模式
找了一圈尾巴5 小时前
设计模式(结构型)-享元模式
设计模式·享元模式
小马爱打代码7 小时前
设计模式:迪米特法则 - 最少依赖,实现高内聚低耦合
设计模式·迪米特法则
骊山道童7 小时前
设计模式-观察者模式
观察者模式·设计模式
自在如风。11 小时前
Java 设计模式:组合模式详解
java·设计模式·组合模式
cccccchd11 小时前
23种设计模式生活化场景,帮助理解
设计模式
未定义.22111 小时前
Java设计模式实战:装饰模式在星巴克咖啡系统中的应用
java·开发语言·设计模式·软件工程
blackA_12 小时前
Java学习——day29(并发控制高级工具与设计模式)
java·学习·设计模式
Antonio91513 小时前
【设计模式】适配器模式
设计模式·oracle·适配器模式
小猪乔治爱打球14 小时前
[Golang修仙之路]单例模式
设计模式