常见的设计模式有哪些?by test

73 阅读3分钟

计模式(Design Patterns)是软件开发中针对常见问题的经典解决方案,分为三大类:创建型结构型行为型。以下是23种经典设计模式及其简要说明:


1. 创建型模式(Creational Patterns)

关注对象的创建机制,提升灵活性和复用性。

  1. 单例模式(Singleton)

    • 确保一个类只有一个实例,并提供全局访问点。
    • 示例:数据库连接池、日志管理器。
  2. 工厂方法模式(Factory Method)

    • 定义创建对象的接口,但由子类决定实例化哪个类。
    • 示例:LoggerFactory 生成不同格式的日志器。
  3. 抽象工厂模式(Abstract Factory)

    • 创建相关或依赖对象的家族,而无需指定具体类。
    • 示例:GUI库(跨平台的按钮、文本框组合)。
  4. 建造者模式(Builder)

    • 分步骤构建复杂对象,分离构造与表示。
    • 示例:StringBuilder、SQL查询构造器。
  5. 原型模式(Prototype)

    • 通过克隆现有对象来创建新对象,避免重复初始化。
    • 示例:Java的Cloneable接口。

2. 结构型模式(Structural Patterns)

关注类和对象的组合方式,形成更大结构。
6. 适配器模式(Adapter)

  • 使不兼容接口能协同工作。
  • 示例:将旧版API适配到新系统。
  1. 装饰器模式(Decorator)

    • 动态扩展对象功能,避免子类爆炸。
    • 示例:Java I/O流(BufferedInputStream包装FileInputStream)。
  2. 代理模式(Proxy)

    • 为对象提供代理以控制访问(如延迟加载、权限校验)。
    • 示例:Spring AOP的动态代理。
  3. 外观模式(Facade)

    • 提供简化接口,隐藏子系统复杂性。
    • 示例:一键启动电脑(封装CPU、内存、硬盘等操作)。
  4. 桥接模式(Bridge)

    • 分离抽象与实现,使两者独立变化。
    • 示例:不同操作系统下的图形渲染API。
  5. 组合模式(Composite)

    • 以树形结构处理部分-整体关系。
    • 示例:文件系统(文件+文件夹统一接口)。
  6. 享元模式(Flyweight)

    • 共享细粒度对象,减少内存消耗。
    • 示例:游戏中的重复纹理、字符池。

3. 行为型模式(Behavioral Patterns)

关注对象间的通信和职责分配
13. 观察者模式(Observer)

  • 定义一对多依赖,对象状态变化时自动通知依赖者。
  • 示例:事件监听、React/Vue的数据响应式。
  1. 策略模式(Strategy)

    • 封装算法族,使其可互换。
    • 示例:排序算法(快速排序、冒泡排序动态切换)。
  2. 命令模式(Command)

    • 将请求封装为对象,支持撤销、队列等操作。
    • 示例:GUI按钮操作、事务管理。
  3. 责任链模式(Chain of Responsibility)

    • 让多个对象依次处理请求,避免请求者与接收者耦合。
    • 示例:Web框架的中间件(如Express.js)。
  4. 状态模式(State)

    • 允许对象在内部状态改变时改变行为。
    • 示例:订单状态(待支付、已发货、已完成)。
  5. 模板方法模式(Template Method)

    • 定义算法骨架,子类重写特定步骤。
    • 示例:AbstractList 的通用列表操作。
  6. 迭代器模式(Iterator)

    • 提供统一方式遍历集合对象。
    • 示例:Java的Iterator接口。
  7. 中介者模式(Mediator)

    • 通过中介对象减少对象间直接通信。
    • 示例:聊天室(用户不直接互发消息,通过服务器中转)。
  8. 备忘录模式(Memento)

    • 捕获并外部化对象状态,以便后续恢复。
    • 示例:游戏存档、撤销操作。
  9. 访问者模式(Visitor)

    • 将算法与对象结构分离,便于新增操作。
    • 示例:编译器对AST(抽象语法树)的不同分析。
  10. 解释器模式(Interpreter)

    • 定义语言的语法表示,并解释执行。
    • 示例:正则表达式引擎、SQL解析。

如何选择设计模式?

  • 创建对象复杂?  → 工厂、建造者、原型。
  • 需解耦接口与实现?  → 桥接、适配器。
  • 动态扩展功能?  → 装饰器、策略。
  • 管理多个对象协作?  → 观察者、中介者。