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

【软考-系统架构设计师】设计模式三大类型解析

在这里插入图片描述


设计模式三大类型深度解析

一、创建型模式(Creational Patterns)

核心目标:解耦对象的创建与使用过程,提供灵活的对象生成机制,降低系统对具体类的依赖。
适用场景:需要动态创建对象、隐藏对象创建细节或优化资源复用率的场景。

1. 单例模式(Singleton)

  • 定义:确保一个类仅有一个实例,并提供全局访问点。
  • 实现方式:饿汉式(类加载时初始化)、懒汉式(延迟加载)、双重校验锁(线程安全)等 。
  • 应用案例:全局配置管理、数据库连接池、日志处理器。

2. 工厂方法模式(Factory Method)

  • 定义:定义一个创建对象的接口,由子类决定实例化的具体类。
  • 优势:支持扩展(新增产品只需增加子类),符合开闭原则 。
  • 典型应用:日志记录器(文件日志、数据库日志)、UI组件生成。

3. 抽象工厂模式(Abstract Factory)

  • 定义:提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。
  • 场景:跨平台UI库(如Windows/Mac风格的按钮、文本框统一生成)。

4. 建造者模式(Builder)

  • 定义:将复杂对象的构建与其表示分离,使同样的构建过程可创建不同形式的产品。
  • 特点:分步构造、支持链式调用,适用于多参数对象(如HTTP请求配置)。

5. 原型模式(Prototype)

  • 定义:通过复制现有实例创建新对象,避免重复初始化开销。
  • 实现:实现Cloneable接口,深拷贝与浅拷贝需区分 。
  • 应用场景:游戏中的角色复制、文档模板生成。

二、结构型模式(Structural Patterns)

核心目标:通过组合类或对象形成更大结构,提升系统灵活性和可维护性。
适用场景:需要简化对象间关系、扩展功能或优化资源使用的场景。

1. 适配器模式(Adapter)

  • 定义:将一个类的接口转换为客户端期望的另一个接口,解决接口不兼容问题。
  • 类型:类适配器(继承)、对象适配器(组合)。
  • 案例:旧系统接口兼容(如将XML数据接口适配为JSON格式)。

2. 桥接模式(Bridge)

  • 定义:将抽象部分与实现部分分离,使两者可独立变化。
  • 优势:避免多层继承导致的类爆炸,支持多维度扩展(如形状与颜色的组合)。

3. 装饰模式(Decorator)

  • 定义:动态地为对象添加额外职责,替代继承扩展功能。
  • 应用:Java I/O流(BufferedReader装饰FileReader)、GUI组件增强。

4. 组合模式(Composite)

  • 定义:将对象组合成树形结构以表示“部分-整体”层次,使客户端统一处理单个对象和组合对象。
  • 典型场景:文件系统目录结构、菜单树管理。

5. 代理模式(Proxy)

  • 定义:为其他对象提供代理以控制访问,常见类型包括虚拟代理(延迟加载)、保护代理(权限控制)和远程代理(网络通信)。
  • 案例:Spring AOP中的动态代理、图片懒加载。

6. 享元模式(Flyweight)

  • 定义:通过共享技术减少大量细粒度对象的内存消耗。
  • 实现:分离内部状态(共享)与外部状态(非共享),如字符池、线程池。

三、行为型模式(Behavioral Patterns)

核心目标:优化对象间的通信与职责分配,增强系统行为的灵活性和可扩展性。
适用场景:需要管理复杂交互逻辑、动态调整行为或实现松耦合的场景。

1. 观察者模式(Observer)

  • 定义:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖对象自动收到通知并更新。
  • 实现:Java中的java.util.Observable、事件监听机制。

2. 策略模式(Strategy)

  • 定义:封装一组算法,使其可互相替换,算法变化独立于客户端。
  • 优势:避免多重条件判断,支持动态切换(如支付方式选择)。

3. 模板方法模式(Template Method)

  • 定义:在父类中定义算法骨架,将某些步骤延迟到子类实现。
  • 应用:框架设计(如Spring的JdbcTemplate)、业务流程标准化。

4. 状态模式(State)

  • 定义:允许对象在其内部状态改变时改变行为,对象表现得像改变了类。
  • 案例:订单状态流转(待支付、已发货、已完成)。

5. 责任链模式(Chain of Responsibility)

  • 定义:将请求沿处理链传递,直到有对象处理它。
  • 场景:审批流程、异常处理链。

6. 命令模式(Command)

  • 定义:将请求封装为对象,支持请求的排队、记录、撤销等操作。
  • 应用:GUI按钮操作、事务回滚机制。

总结与对比

类别核心关注点典型模式设计原则体现
创建型模式对象创建的灵活性与解耦单例、工厂方法、抽象工厂单一职责、开闭原则
结构型模式类与对象的组合与结构优化适配器、桥接、装饰合成复用、接口隔离
行为型模式对象间的交互与职责分配观察者、策略、模板方法依赖倒置、里氏替换

设计原则关联

  • 单一职责原则:工厂方法模式将对象创建职责分离。
  • 开闭原则:策略模式通过扩展新算法而非修改现有代码实现功能增强。
  • 合成复用原则:组合模式通过对象组合而非继承构建层次结构。

通过合理运用这三大类设计模式,能够构建高内聚、低耦合的软件系统,有效应对需求变化与系统扩展的挑战。具体模式的选择需结合业务场景与系统目标,避免过度设计。

http://www.xdnf.cn/news/53.html

相关文章:

  • 简单接口工具(ApiCraft-Web)
  • 从0开始掌握动态规划
  • 目标分割模型优化自身参数都是梯度下降算法吗?
  • 基于Django框架的图书索引智能排序系统设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 昆仑万维开源 32B 推理模型 Skywork-OR1:超越 DeepSeek-R1
  • 医疗设备预测性维护合规架构:从法规遵循到技术实现的深度解析
  • c++:智能指针
  • RT-Thread学习笔记(一)
  • 快速迭代收缩-阈值算法(FISTA)
  • 第十七届“华中杯”B 题校园共享单车的调度与维护问题分析
  • Sentinel源码—4.FlowSlot实现流控的原理一
  • Linux 网络配置
  • postman莫名奇妙报错,可能是注释引起的。postman 过滤请求体中的注释。
  • 云服务器CVM标准型S5实例性能测评——2025腾讯云
  • TDengine 语言连接器(PHP)
  • 【数据结构_10】二叉树(1)
  • 深入理解设计模式之模板方法模式 1d87ab8b42e98069b6c2c5a3d2710f9a
  • 停止回答 docker启动redis
  • Python中如何加密/解密敏感信息(如用户密码、token)
  • java 设计模式之单例模式
  • 利用互斥锁或者利用逻辑过期解决缓存击穿问题
  • 【Linux我做主】探秘gcc/g++和动静态库
  • 22、字节与字符的概念以及二者有什么区别?
  • 【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现
  • Oracle补丁安装工具opatch更新报错处理
  • pytorch学习02
  • ESP32之OTA固件升级流程,基于VSCode环境下的ESP-IDF开发,基于阿里云物联网平台MQTT-TLS连接通信(附源码)
  • HttpSessionBindingListener 的用法笔记250417
  • vscode与vim+cscope+tags热键冲突
  • Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑