当前位置: 首页 > news >正文

设计模式有哪些

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

一、创建型模式(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)

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

设计模式的核心价值

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

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

http://www.dtcms.com/a/331134.html

相关文章:

  • 2022_ISG_CTF-rechall详解(含思考过程)
  • MixOne在macOS上安装碰到的问题
  • 上网行为安全概述
  • 【跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命】
  • 数据结构:用链表实现队列(Implementing Queue Using List)
  • python批量爬虫实战之windows主题爬取
  • 移位操作符技巧
  • 8. 函数简介
  • DeepSeek补全IBM MQ 9.4 REST API 执行命令的PPT
  • Mac chrome浏览器下载DevEco Studio 6.0.0 Beta2失败
  • 分布式锁—Redisson的公平锁
  • 线上故障定位:从报警到根因的实战指南
  • Eureka故障处理大汇总
  • 使用 Git Submodules 管理前后端分离项目
  • scikit-learn/sklearn学习|广义线性回归 Logistic regression的三种成本函数
  • Docker 核心技术:Namespace
  • Java毕业设计选题推荐 |基于SpringBoot的健身爱好线上互动与打卡社交平台系统 互动打卡小程序系统
  • 2019 GPT2原文 Language Models are Unsupervised Multitask Learners - Reading Notes
  • [激光原理与应用-274]:理论 - 波动光学 - 光是电磁波,无线电磁波可以通过天线接收和发送,为什么可见光不可以?
  • Visual Studio2019/2022离线安装完整教程(含闪退解决方法)
  • 无人机双目视觉设计要点概述!
  • SOD-YOLO:基于YOLO的无人机图像小目标检测增强方法
  • 值传递+move 优化数据传递
  • torchvision中数据集的使用与DataLoader 小土堆pytorch记录
  • Autoppt-AI驱动的演示文稿生成工具
  • 深入理解 RAG:检索增强生成技术详解
  • 通过机器学习框架实现Android手写识别输入功能
  • 【开源工具】基于硬件指纹的“一机一码”软件授权系统全实现(附完整源码)
  • MapReduce系统架构,颠覆了互联网分层架构的本质?
  • xiaozhi-esp32 仓库分析文档