设计模式有哪些

发布于:2025-08-17 ⋅ 阅读:(15) ⋅ 点赞:(0)

设计模式是解决软件设计中常见问题的标准化方案,根据用途可分为三大类:创建型模式结构型模式行为型模式。以下是各类模式的详细分类及核心用途:

一、创建型模式(Creational Patterns)

关注对象的创建过程,隐藏创建逻辑,使代码更灵活。

  1. 单例模式(Singleton)

    • 确保一个类只有一个实例,并提供全局访问点。
    • 应用:日志管理器、配置管理器。
  2. 工厂模式(Factory)

    • 简单工厂:通过一个工厂类根据参数创建不同对象。
    • 工厂方法:定义创建对象的接口,由子类决定实例化哪个类。
    • 抽象工厂:创建一系列相关或依赖的产品家族。
    • 应用:UI组件库、数据库驱动创建。
  3. 建造者模式(Builder)

    • 将复杂对象的构建与表示分离,分步构建对象。
    • 应用:复杂对象(如文档、汽车)的构造。
  4. 原型模式(Prototype)

    • 通过复制现有对象创建新对象,避免重复初始化。
    • 应用:需要频繁创建相似对象的场景(如游戏角色克隆)。
  5. 对象池模式(Object Pool)

    • 预先创建一组对象并复用,减少创建销毁开销。
    • 应用:数据库连接池、线程池。

二、结构型模式(Structural Patterns)

处理类或对象的组合,优化结构以实现功能复用。

  1. 适配器模式(Adapter)

    • 将一个类的接口转换为客户端期望的另一个接口,使不兼容的类可协同工作。
    • 应用:新旧接口兼容、跨库交互。
  2. 装饰器模式(Decorator)

    • 动态给对象添加额外功能,不改变其原有结构。
    • 应用:IO流包装(如BufferedReader)、日志增强。
  3. 代理模式(Proxy)

    • 为对象提供替代物,控制对原对象的访问(远程访问、延迟加载、权限控制)。
    • 应用:远程代理(RPC)、缓存代理、保护代理。
  4. 组合模式(Composite)

    • 将对象组合成树形结构,统一处理单个对象和组合对象。
    • 应用:文件系统(文件/文件夹)、UI组件树。
  5. 桥接模式(Bridge)

    • 将抽象与实现分离,使两者可独立变化。
    • 应用:跨平台组件(如不同系统的窗口实现)。
  6. 外观模式(Facade)

    • 为复杂系统提供简化接口,隐藏内部复杂性。
    • 应用:框架的入口类(如HttpClient封装底层网络操作)。
  7. 享元模式(Flyweight)

    • 共享细粒度对象,减少内存消耗。
    • 应用:文字处理软件(重复字符复用)、游戏中的粒子效果。

三、行为型模式(Behavioral Patterns)

关注对象间的交互和职责分配,优化通信方式。

  1. 观察者模式(Observer)

    • 定义一对多依赖,当一个对象状态变化时,所有依赖者自动收到通知。
    • 应用:事件监听、消息订阅系统。
  2. 中介者模式(Mediator)

    • 通过中介者封装多对象间的交互,减少直接耦合。
    • 应用:聊天室、GUI窗口管理器。
  3. 策略模式(Strategy)

    • 定义算法家族,使其可互相替换,客户端根据需求选择。
    • 应用:排序算法切换、支付方式选择。
  4. 模板方法模式(Template Method)

    • 父类定义算法骨架,子类实现具体步骤,固定流程同时保留灵活性。
    • 应用:框架中的生命周期方法(如Servlet的doGet/doPost)。
  5. 迭代器模式(Iterator)

    • 提供遍历集合元素的统一接口,无需暴露集合内部结构。
    • 应用:std::vector的迭代器、Java的Iterator接口。
  6. 命令模式(Command)

    • 将请求封装为对象,实现请求的参数化、队列化和撤销。
    • 应用:GUI按钮操作、事务日志(撤销/重做)。
  7. 状态模式(State)

    • 允许对象在状态变化时改变行为,将状态逻辑封装到不同类中。
    • 应用:订单状态流转(待支付→已支付→已发货)。
  8. 责任链模式(Chain of Responsibility)

    • 将请求沿着处理链传递,直到有对象处理它,避免请求发送者与接收者耦合。
    • 应用:日志级别处理、权限校验链。
  9. 访问者模式(Visitor)

    • 在不修改对象结构的前提下,为对象添加新操作。
    • 应用:数据结构的复杂遍历(如AST语法树分析)。
  10. 备忘录模式(Memento)

    • 捕获对象状态并保存,以便后续恢复。
    • 应用:编辑器的撤销功能、游戏存档。
  11. 解释器模式(Interpreter)

    • 定义语言语法的解释器,用于解析特定格式的文本。
    • 应用:表达式解析器、正则表达式引擎。

设计模式的核心价值

  • 复用性:解决重复出现的设计问题。
  • 可读性:使用公认的模式使代码更易理解。
  • 灵活性:降低修改成本,适应需求变化。

实际开发中,应根据问题场景选择合适的模式,避免过度设计。


网站公告

今日签到

点亮在社区的每一天
去签到