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)的访问。

四、总结

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

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

相关推荐
geovindu5 小时前
CSharp:Chain of Responsibility Pattern
开发语言·后端·设计模式·c#·.net·责任链模式·行为模式
梓仁沐白8 小时前
【Agent 设计模式】多智能体协作
microsoft·设计模式·php
努力学习的廖同学8 小时前
前端进阶-设计模式
设计模式
workflower1 天前
情境感知系统
人工智能·机器学习·设计模式·自然语言处理·机器人
咖啡八杯1 天前
设计模式中的原则
设计模式·接口隔离原则·里氏替换原则·开闭原则·合成复用原则·单一职责原则
安冬的码畜日常1 天前
【工欲善其事】深入理解 Node.js 带并发上限的异步任务批量执行逻辑
javascript·设计模式·node.js·ai编程·异步编程·并发执行
AI大法师2 天前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
晚安code2 天前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
workflower2 天前
从幻觉,到现实
人工智能·深度学习·机器学习·设计模式·机器人
电子科技圈2 天前
第二代无线平台历久弥新,赋能物联网创新迭代
人工智能·嵌入式硬件·mcu·物联网·设计模式·硬件架构·iot