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 解析、正则表达式引擎。

相关推荐
饮茶三千1 天前
基于 WangEditor 的富文本编辑器定制实践
前端·vue.js·设计模式
ttod_qzstudio1 天前
【软考设计模式】中介者模式:网状交互的解耦与集中调度精讲
设计模式·中介者模式
饼干哥哥2 天前
一夜之间,全世界的 Agent 能力提高了一个档次
设计模式·agent·代码规范
Kel2 天前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js
我登哥MVP2 天前
进 Gang of Four 设计模式:建造者模式
java·设计模式·建造者模式
进击的前栈3 天前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞3 天前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研3 天前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
workflower3 天前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研3 天前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做