System Design 101: 18种设计模式

18种每位开发者都应该了解的设计模式

设计模式是常见软件设计问题的可重用解决方案。它们为开发者提供了共享语言,优化代码组织,推广最佳实践。以下详细介绍了18种关键设计模式的目的及其在实际开发中的应用,同时提供了对比表和部分模式的Mermaid时序图以便于理解。


创建型模式:简化对象创建

  1. 抽象工厂 (Abstract Factory): 家族创建者
    目的:创建一组相关对象,而无需指定其具体类。
    示例:UI工具包可以为不同平台(如Windows、Mac等)生成按钮、复选框和文本输入框。

  2. 建造者 (Builder): 乐高大师
    目的:一步步构造复杂对象,将创建过程与最终表示分离。
    示例:逐步为汽车添加引擎、轮子和座椅等组件。

  3. 原型 (Prototype): 克隆创建者
    目的:通过克隆现有实例来创建新对象。
    示例:复制预配置的文档模板。

  4. 单例 (Singleton): 独一无二
    目的:确保一个类只有一个实例,并提供全局访问点。
    示例:数据库连接管理器,确保只有一个连接池。


结构型模式:组织对象与类

  1. 适配器 (Adapter): 通用插头
    目的:将一个类的接口转换为另一个接口,使得不兼容的接口可以协同工作。
    示例:将欧标插头适配为美标插头。 =

  2. 桥接 (Bridge): 功能连接器
    目的:将对象的抽象部分与其实现部分分离,使它们可以独立变化。
    示例:将电视功能与遥控器操作分离。

  3. 组合 (Composite): 树结构生成器
    目的:将对象组合成树形结构,用于表示部分和整体的层次结构。
    示例:文件系统中文件和文件夹的层次结构。

  4. 装饰器 (Decorator): 功能定制者
    目的:动态地为对象添加新功能,而无需更改其结构。
    示例:为文本框动态添加滚动条或边框。

  5. 外观 (Facade): 一站式服务
    目的:为复杂子系统提供一个简单接口,使客户端与子系统交互更加容易。
    示例:汽车仪表盘简化了与引擎、空调和导航系统的交互。

  6. 享元 (Flyweight): 空间节省者
    目的:通过共享小型、可复用的对象来节省内存。
    示例:文字处理器中重复使用字形对象来渲染文本。

  7. 代理 (Proxy): 替身演员
    目的:为另一个对象提供代理以控制访问。
    示例:为大文件图片提供虚拟代理,仅在需要时加载。


行为型模式:管理通信与行为

  1. 责任链 (Chain of Responsibility): 请求传递者
    目的:将请求沿着对象链传递,直到有对象处理该请求。
    示例:GUI中的事件冒泡机制。

  2. 命令 (Command): 任务包装者
    目的:将请求封装为对象,允许请求被参数化、延迟或排队。
    示例:实现撤销功能,通过存储已执行的命令。

  3. 迭代器 (Iterator): 集合浏览器
    目的:提供一种方法顺序访问集合中的元素,而不暴露其内部结构。
    示例:遍历文件列表。

  4. 中介者 (Mediator): 通信中心
    目的:通过集中化管理对象之间的通信来简化交互。
    示例:聊天室管理参与者的通信。

  5. 备忘录 (Memento): 时间胶囊
    目的:捕获并恢复对象的状态,而无需暴露其实现。
    示例:文本编辑器的撤销/重做功能。

  6. 观察者 (Observer): 消息广播者
    目的:定义对象间的依赖关系,当一个对象的状态发生变化时通知其他对象。
    示例:天气应用更新小部件。

  7. 访问者 (Visitor): 技能访问者
    目的:向现有类添加新操作,而无需修改类。
    示例:税收计算系统对不同类型的交易应用不同规则。


对比表

模式 类别 目的 示例
抽象工厂 创建型 创建一组相关对象 UI 工具包
建造者 创建型 一步步构造复杂对象 构造汽车
原型 创建型 克隆现有对象 文档模板
单例 创建型 确保唯一实例 数据库连接
适配器 结构型 转换一个接口为另一个接口 插头适配器
桥接 结构型 分离抽象与实现 电视遥控器
组合 结构型 构建树状层次结构 文件系统
装饰器 结构型 动态添加功能 文本框滚动条
外观 结构型 简化复杂子系统 汽车仪表盘
享元 结构型 共享小型可复用对象 文本字形
代理 结构型 控制对象访问 虚拟图片代理
责任链 行为型 传递请求直到被处理 GUI 事件冒泡
命令 行为型 封装请求为对象 撤销功能
迭代器 行为型 顺序访问集合 文件列表遍历
中介者 行为型 简化对象通信 聊天室
备忘录 行为型 捕获并恢复对象状态 文本编辑器的撤销功能
观察者 行为型 通知依赖对象 天气应用
访问者 行为型 添加操作而不修改类 税收计算

总结

这18种设计模式为常见的软件开发问题提供了强大的解决方案。通过理解它们的目的、工作原理及实际示例,开发者可以构建更加可维护、可扩展和高效的软件系统。通过对比表和时序图,应用这些模式变得更加直观和清晰。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *