23种设计模式

一、创建型模式(Creational Patterns)

聚焦对象创建过程,简化复杂对象的实例化。

  1. 单例模式(Singleton)

    • 定义:确保一个类仅有一个实例,并提供全局访问点。
    • 示例:日志管理器、配置中心。
  2. 工厂模式(Factory Method)

    • 定义:定义创建对象的接口,由子类决定实例化哪个类。
    • 示例:根据用户类型创建不同的用户对象。
  3. 抽象工厂模式(Abstract Factory)

    • 定义:提供一个创建一系列相关或依赖对象的接口,无需指定具体类。
    • 示例:跨平台 UI 组件库(如鸿蒙、Android、iOS 的按钮工厂)。
  4. 建造者模式(Builder)

    • 定义:分步构建复杂对象,分离构造与表示。
    • 示例:配置一个包含多个参数的网络请求对象。
  5. 原型模式(Prototype)

    • 定义:通过克隆现有对象创建新对象,避免重复初始化。
    • 示例:游戏中快速复制角色对象。

二、结构型模式(Structural Patterns)

关注类和对象的组合,优化系统结构。

  1. 适配器模式(Adapter)

    • 定义:将一个类的接口转换为另一个接口,使不兼容的类可以协同工作。
    • 示例:将旧版本的 API 适配到新系统中。
  2. 桥接模式(Bridge)

    • 定义:分离抽象与实现,使两者可以独立变化。
    • 示例:将 UI 组件的抽象类与具体渲染实现分离。
  3. 装饰器模式(Decorator)

    • 定义:动态添加功能到对象,避免继承的局限性。
    • 示例:给图片加载组件添加缓存、压缩等功能。
  4. 组合模式(Composite)

    • 定义:将对象组合成树形结构,统一处理单个对象和组合对象。
    • 示例:文件系统中的目录和文件管理。
  5. 外观模式(Facade)

    • 定义:为子系统提供统一接口,简化复杂子系统的使用。
    • 示例:支付系统的统一接口封装(支付宝、微信支付等)。
  6. 享元模式(Flyweight)

    • 定义:共享细粒度对象,减少内存消耗。
    • 示例:游戏中大量重复的子弹、粒子效果对象。
  7. 代理模式(Proxy)

    • 定义:为其他对象提供代理以控制访问。
    • 示例:网络请求的代理缓存、权限控制。

三、行为型模式(Behavioral Patterns)

处理对象间的交互和职责分配。

  1. 策略模式(Strategy)

    • 定义:定义算法族,使它们可互换,策略的变化独立于使用它的客户。
    • 示例:电商平台的促销策略(满减、折扣、赠品)。
  2. 责任链模式(Chain of Responsibility)

    • 定义:将请求传递给处理者链,直到有一个处理者响应。
    • 示例:请假审批流程(员工→主管→经理)。
  3. 命令模式(Command)

    • 定义:将请求封装为对象,支持撤销、重做等操作。
    • 示例:文本编辑器的撤销 / 重做功能。
  4. 迭代器模式(Iterator)

    • 定义:提供遍历集合元素的统一接口,隐藏集合内部结构。
    • 示例:遍历列表、树结构等数据集合。
  5. 中介者模式(Mediator)

    • 定义:用中介对象封装对象间的交互,减少对象间的直接依赖。
    • 示例:聊天系统中用户间的消息传递。
  6. 备忘录模式(Memento)

    • 定义:捕获对象状态并保存,以便恢复。
    • 示例:游戏进度保存与恢复。
  7. 观察者模式(Observer)

    • 定义:对象间的一对多依赖,当对象状态变化时通知所有依赖者。
    • 示例:股票价格实时更新通知。
  8. 状态模式(State)

    • 定义:对象行为随状态改变而变化,状态作为独立类。
    • 示例:订单状态机(待支付→已支付→已发货)。
  9. 模板方法模式(Template Method)

    • 定义:定义算法骨架,子类实现具体步骤。
    • 示例:HTTP 请求的模板(预处理→发送→后处理)。
  10. 访问者模式(Visitor)

    • 定义:将数据结构与操作分离,允许在不修改数据结构的前提下添加新操作。
    • 示例:文档解析器支持多种格式(HTML、Markdown)的访问。

四、总结

  • 创建型:解决对象创建的复杂性,如单例、工厂。
  • 结构型:优化类 / 对象的组合,如适配器、装饰器。
  • 行为型:规范对象间的交互逻辑,如策略、观察者。

设计模式的选择需结合具体场景,其核心目标是提高代码的可维护性可扩展性复用性

相关推荐
Seven975 小时前
【设计模式】使用中介者模式实现松耦合设计
java·后端·设计模式
Seven975 小时前
【设计模式】探索状态模式在现代软件开发中的应用
java·后端·设计模式
Seven975 小时前
【设计模式】从事件驱动到即时更新:掌握观察者模式的核心技巧
java·后端·设计模式
Seven976 小时前
【设计模式】责任链模式教你如何优雅地分发任务
java·后端·设计模式
Seven976 小时前
【设计模式】命令模式助力快速添加新命令而不影响现有代码
java·后端·设计模式
这里有鱼汤7 小时前
程序员必看!突破编程瓶颈!这3种设计模式让你的Python项目飞起来
后端·python·设计模式
vker7 小时前
责任链 vs 规则树:如何构建更强大的规则引擎?
后端·设计模式·代码规范
牵牛老人7 小时前
C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
c++·设计模式·抽象工厂模式
液态不合群7 小时前
【设计模式】从火车站卖票看代理模式的实际应用
设计模式·代理模式