架构设计系列(四):设计模式

一、概述

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

二、开发必须掌握的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(技艺高超的客人)

    在不改变类的前提下,定义新的操作。

    适用于需要在不修改类的情况下扩展其功能的场景,如编译器中的语法树遍历。

三、总结

设计模式是软件开发中的宝贵工具,它们提供了解决常见问题的标准化方法。通过合理使用设计模式,可以提高代码的质量、可维护性和可扩展性。以下是这些设计模式的分类和核心思想:

模式 分类 核心思想
抽象工厂模式 创建型 创建一组相关对象。
建造者模式 创建型 分步骤构建复杂对象。
原型模式 创建型 通过复制现有对象创建新对象。
单例模式 创建型 确保一个类只有一个实例。
适配器模式 结构型 转换接口以兼容不同类。
桥接模式 结构型 将抽象与实现分离。
组合模式 结构型 构建树形结构以表示部分-整体关系。
装饰器模式 结构型 动态扩展对象功能。
外观模式 结构型 提供简化接口以封装复杂系统。
享元模式 结构型 共享细粒度对象以节省内存。
代理模式 结构型 控制对对象的访问。
责任链模式 行为型 将请求传递给多个处理者。
命令模式 行为型 将请求封装为对象。
迭代器模式 行为型 提供遍历集合的方法。
中介者模式 行为型 封装对象间的交互。
备忘录模式 行为型 捕获并恢复对象状态。
观察者模式 行为型 定义对象间的一对多依赖关系。
访问者模式 行为型 在不修改类的情况下扩展其功能。
相关推荐
Aska_Lv23 分钟前
业务架构设计---硬件设备监控指标数据上报业务Java企业级架构
后端·架构
用户611881615196224 分钟前
Java基础面试题
java
软考诸葛老师27 分钟前
系统架构设计师-第5章 计算机网络
计算机网络·系统架构·系统架构设计师
洛北辰南39 分钟前
系统架构设计师—系统架构设计篇—SOA架构
架构·系统架构·soa
深圳市快瞳科技有限公司44 分钟前
多宠识别:基于计算机视觉的智能宠物管理系统架构解析
计算机视觉·系统架构·宠物
DavidSoCool1 小时前
Elasticsearch Java API Client [8.17] 使用
java·大数据·elasticsearch
无世世1 小时前
【Java从入门到起飞】面向对象编程(高级)
java·开发语言
Vic101011 小时前
Mac如何查看 IDEA 的日志文件
java·macos·intellij-idea
陈逸轩*^_^*1 小时前
idea打不开,idea打不开,Error occurred during initialization of VM
java·ide·intellij-idea
=PNZ=BeijingL1 小时前
使用Mockito实现单元测试
java