一、概述
设计模式是软件开发中常见问题的可重用解决方案,它们为构建更好的软件提供了蓝图。它们不是具体的代码,而是一种设计思想或模板,可以帮助开发人员更高效地构建可维护、可扩展的软件。
二、开发必须掌握的18个关键的设计模式

2.1 设计模式的分类
- 创建型模式(Creational Patterns)
解决对象创建的问题,提供灵活的对象创建机制。 - 结构型模式(Structural Patterns)
解决类和对象的组合问题,提供灵活的结构设计。 - 行为型模式(Behavioral Patterns)
解决对象之间的职责分配和通信问题。
2.2 创建型模式
- 抽象工厂模式(Abstract Factory)
Family Creator(家族创造者)。
提供一个接口,用于创建一系列相关或依赖的对象,而无需指定具体类。
其使用于需要创建一组相关对象的场景,如跨平台的 UI 组件。 - 建造者模式(Builder)
Lego Master(乐高大师)。
将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
适用于需要分步骤构建复杂对象的场景,如生成复杂的文档或配置。 - 原型模式(Prototype)
Clone Maker(克隆制造者)。
通过复制现有对象来创建新对象,而不是通过实例化类。
其适用于需要高效创建相似对象的场景,如游戏中的敌人生成。 - 单例模式(Singleton)
One and Only(独一无二)
确保一个类只有一个实例,并提供全局访问点。
其适用于需要全局唯一实例的场景,如配置管理、日志记录。
2.3 结构型模式
- 适配器模式(Adapter)
Universal Plug(万能插头)
将一个类的接口转换成客户端期望的另一个接口。
其适用于集成不兼容接口的系统,如第三方库的集成。 - 桥接模式(Bridge)
Function Connector(功能连接器)
将抽象部分与实现部分分离,使它们可以独立变化。
其适用于需要将抽象与实现解耦的场景,如跨平台的图形渲染。 - 组合模式(Composite)
Tree Builder(树构建者)
将对象组合成树形结构以表示"部分-整体"的层次结构。
适用于需要处理树形结构的场景,如文件系统、UI 组件。 - 装饰器模式(Decorator)
Customizer(定制器)
动态地给对象添加额外的职责,而不改变其核心功能。
适用于需要动态扩展对象功能的场景,如日志记录、权限检查。 - 外观模式(Facade)
One-Stop-Shop(一站式服务)
提供一个统一的接口,简化复杂系统的使用。
适用于需要简化复杂系统接口的场景,如框架的封装。 - 享元模式(Flyweight)
Space Saver(空间节省者)
通过共享细粒度对象来节省内存。
适用要高效管理大量相似对象的场景,如文本编辑器中的字符渲染。 - 代理模式(Proxy)
Stand-In Actor(替身演员)
为其他对象提供一个代理,以控制对这个对象的访问。
需要控制对象访问的场景,如延迟加载、权限控制。
2.4 行为型模式
-
责任链模式(Chain of Responsibility)
Request Relay(请求接力)将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
适用于需要动态处理请求的场景,如事件处理、审批流程。
-
命令模式(Command)
Task Wrapper(任务包装器)将请求封装为对象,从而使你可以用不同的请求对客户进行参数化。
适用于需要支持撤销、重做或日志记录的场景,如文本编辑器的操作历史。
-
迭代器模式(Iterator)
Collection Explorer(集合探索者)提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示。
适用于需要遍历集合的场景,如列表、树形结构。
-
中介者模式(Mediator)
Communication Hub(通信枢纽)定义一个中介对象来封装一组对象之间的交互,从而减少对象之间的直接依赖。
适用于需要简化对象间复杂交互的场景,如聊天室、事件总线。
-
备忘录模式(Memento)
Time Capsule(时间胶囊)在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便以后恢复。
适用于需要实现撤销、恢复功能的场景,如文本编辑器的撤销操作。
-
观察者模式(Observer)
News Broadcaster(新闻广播员)定义对象间的一对多依赖关系,当一个对象改变状态时,所有依赖它的对象都会收到通知。
适用于需要实现事件驱动的场景,如 GUI 框架、消息通知系统。
-
访问者模式(Visitor)
Skillful Guest(技艺高超的客人)在不改变类的前提下,定义新的操作。
适用于需要在不修改类的情况下扩展其功能的场景,如编译器中的语法树遍历。
三、总结
设计模式是软件开发中的宝贵工具,它们提供了解决常见问题的标准化方法。通过合理使用设计模式,可以提高代码的质量、可维护性和可扩展性。以下是这些设计模式的分类和核心思想:
模式 | 分类 | 核心思想 |
---|---|---|
抽象工厂模式 | 创建型 | 创建一组相关对象。 |
建造者模式 | 创建型 | 分步骤构建复杂对象。 |
原型模式 | 创建型 | 通过复制现有对象创建新对象。 |
单例模式 | 创建型 | 确保一个类只有一个实例。 |
适配器模式 | 结构型 | 转换接口以兼容不同类。 |
桥接模式 | 结构型 | 将抽象与实现分离。 |
组合模式 | 结构型 | 构建树形结构以表示部分-整体关系。 |
装饰器模式 | 结构型 | 动态扩展对象功能。 |
外观模式 | 结构型 | 提供简化接口以封装复杂系统。 |
享元模式 | 结构型 | 共享细粒度对象以节省内存。 |
代理模式 | 结构型 | 控制对对象的访问。 |
责任链模式 | 行为型 | 将请求传递给多个处理者。 |
命令模式 | 行为型 | 将请求封装为对象。 |
迭代器模式 | 行为型 | 提供遍历集合的方法。 |
中介者模式 | 行为型 | 封装对象间的交互。 |
备忘录模式 | 行为型 | 捕获并恢复对象状态。 |
观察者模式 | 行为型 | 定义对象间的一对多依赖关系。 |
访问者模式 | 行为型 | 在不修改类的情况下扩展其功能。 |