创建型模式(Creational Patterns)
关注对象的创建机制,提高代码的灵活性和可复用性。
单例模式(Singleton)
确保一个类只有一个实例,并提供全局访问点。
示例:数据库连接池、日志系统。工厂方法模式(Factory Method)
定义创建对象的接口,但由子类决定实例化哪个类。
示例:不同品牌的汽车工厂生产各自的汽车。抽象工厂模式(Abstract Factory)
创建相关或依赖对象的家族,而无需指定具体类。
示例:跨平台的 UI 组件库(如 Windows/Mac 的按钮和文本框)。建造者模式(Builder)
分步骤构建复杂对象,分离构造过程和表示。
示例:构造一个包含多种部件的复杂对象(如电脑组装)。原型模式(Prototype)
通过复制现有对象来创建新对象,避免重复初始化。
示例:克隆一个配置好的对象(如游戏中的敌人复制)。
2. 结构型模式(Structural Patterns)
关注类和对象的组合,形成更大的结构。
适配器模式(Adapter)
将不兼容的接口转换为可兼容的接口。
示例:将旧系统的 API 适配到新系统。装饰器模式(Decorator)
动态地为对象添加额外职责,避免子类爆炸。
示例:为咖啡添加糖、牛奶等配料。代理模式(Proxy)
为其他对象提供一种代理以控制对这个对象的访问。
示例:虚拟代理(延迟加载图片)、保护代理(权限控制)。外观模式(Facade)
提供统一的接口来简化子系统复杂性。
示例:一键启动电脑(封装了CPU、内存、硬盘等启动过程)。桥接模式(Bridge)
将抽象与实现分离,使它们可以独立变化。
示例:不同形状(圆形、方形)和颜色(红、蓝)的组合。组合模式(Composite)
将对象组合成树形结构以表示“部分-整体”层次。
示例:文件系统中的文件夹和文件。享元模式(Flyweight)
通过共享技术高效地支持大量细粒度对象。
示例:游戏中的重复粒子(如树木、子弹)。
3. 行为型模式(Behavioral Patterns)
关注对象之间的通信和职责分配。
策略模式(Strategy)
定义一系列算法,封装它们并使它们可互换。
示例:排序算法(快速排序、冒泡排序)的动态切换。观察者模式(Observer)
定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者自动更新。
示例:事件监听系统、消息订阅。命令模式(Command)
将请求封装为对象,支持请求的排队、日志或撤销。
示例:遥控器按钮绑定不同命令。模板方法模式(Template Method)
定义算法的骨架,将某些步骤延迟到子类实现。
示例:冲泡饮料的固定流程(咖啡 vs 茶)。迭代器模式(Iterator)
提供一种方法顺序访问聚合对象的元素,而不暴露其内部表示。
示例:遍历集合(列表、树等)。状态模式(State)
允许对象在内部状态改变时改变其行为。
示例:电梯的不同状态(运行、停止、故障)。责任链模式(Chain of Responsibility)
将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
示例:审批流程(经理→总监→CEO)。中介者模式(Mediator)
用一个中介对象封装一系列对象的交互。
示例:聊天室中的消息中转。访问者模式(Visitor)
在不修改类的前提下为类添加新的操作。
示例:对文档结构(HTML DOM)的统计分析。备忘录模式(Memento)
捕获并外部化对象的内部状态以便后续恢复。
示例:游戏存档。解释器模式(Interpreter)
定义语言的文法,并解释执行。
示例:正则表达式解析、SQL 解释。