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

C++设计模式

简介

二十三种设计模式(经典的 GoF 设计模式)分为 创建型、结构型、行为型 三大类,以下是详细分类及其核心作用:

一、创建型模式(5种)

目的:控制对象的创建方式,解耦对象的实例化过程。

  1. 单例模式(Singleton)

    • 确保一个类只有一个实例,并提供全局访问点(如数据库连接池)。

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

    • 定义创建对象的接口,但由子类决定实例化哪个类(如日志记录器)。

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

    • 创建一组相关或依赖对象的家族,无需指定具体类(如跨平台UI组件库)。

  4. 建造者模式(Builder)

    • 分步骤构建复杂对象(如SQL查询构造器、游戏角色生成器)。

  5. 原型模式(Prototype)

    • 通过复制现有对象来创建新对象(如深拷贝配置模板)。


二、结构型模式(7种)

目的:处理类或对象的组合,形成更大的结构。
6. 适配器模式(Adapter)

  • 使不兼容接口能协同工作(如旧系统接口适配新API)。

  1. 桥接模式(Bridge)

    • 将抽象与实现分离,使两者可独立变化(如不同图形渲染引擎切换)。

  2. 组合模式(Composite)

    • 以树形结构处理对象的部分-整体关系(如文件系统目录和文件)。

  3. 装饰器模式(Decorator)

    • 动态扩展对象功能(如Java的InputStream缓冲装饰器)。

  4. 外观模式(Facade)

    • 提供简化复杂子系统的统一接口(如一键启动电脑的“电源按钮”)。

  5. 享元模式(Flyweight)

    • 共享细粒度对象以减少内存占用(如游戏中的重复贴图)。

  6. 代理模式(Proxy)

    • 控制对对象的访问(如远程代理、缓存代理、安全代理)。


三、行为型模式(11种)

目的:管理对象间的交互和职责分配。
13. 责任链模式(Chain of Responsibility)
- 让多个对象依次处理请求(如HTTP中间件、审批流程)。
14. 命令模式(Command)
- 将请求封装为对象,支持撤销/重做(如编辑器操作历史)。
15. 解释器模式(Interpreter)
- 定义语言的语法规则(如SQL解析、正则表达式)。
16. 迭代器模式(Iterator)
- 提供遍历集合的统一方式(如C++ STL中的迭代器)。
17. 中介者模式(Mediator)
- 通过中介对象减少类间直接耦合(如聊天室服务器)。
18. 备忘录模式(Memento)
- 保存并恢复对象状态(如游戏存档)。
19. 观察者模式(Observer)
- 定义一对多的依赖关系,状态变更时自动通知(如事件监听)。
20. 状态模式(State)
- 允许对象在内部状态改变时改变行为(如订单状态流转)。
21. 策略模式(Strategy)
- 封装算法族,使其可互换(如排序算法、支付方式选择)。
22. 模板方法模式(Template Method)
- 定义算法骨架,子类重写特定步骤(如Android Activity生命周期)。
23. 访问者模式(Visitor)
- 在不修改类的前提下为类添加新操作(如AST树遍历)。


记忆技巧

  • 创建型:单例、工厂、抽象工厂、建造者、原型。

  • 结构型:适配器、桥接、组合、装饰器、外观、享元、代理。

  • 行为型:责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者。

这些模式是面向对象设计的经典解决方案,实际开发中常组合使用(如工厂+策略、观察者+状态)。

http://www.lqws.cn/news/452035.html

相关文章:

  • 在VTK中捕捉体绘制图像并实时图像处理
  • uniapp开发小程序,导出文件打开并保存,实现过程downloadFile下载,openDocument打开
  • 【Python】Excel表格操作:ISBN转条形码
  • React Native【实战范例】弹跳动画菜单导航
  • 学习threejs,三维汽车模拟器,场景有树、云、山等
  • Nginx-Ingress-Controller自定义端口实现TCP/UDP转发
  • 大数据系统架构实践(一):Zookeeper集群部署
  • 局域网投屏工具(将任何设备转换为计算机的辅助屏幕)Deskreen
  • LVS负载均衡群集:Nginx+Tomcat负载均衡群集
  • Lora训练
  • 项目管理利器:甘特图的全面解析与应用指南
  • 计算机网络八股第二期
  • net程序-Serilog 集成 SQL Server LocalDB 日志记录指南
  • 有方 N58 LTE Cat.1 模块联合 SD NAND 贴片式 TF 卡 MKDV1GIL-AST,打造 T-BOX 高性能解决方案
  • 如何在WordPress中添加导航菜单?
  • 基于 CNN-LSTM-GRU 架构的超音速导弹轨迹高级预测
  • Redis如何解决缓存击穿,缓存雪崩,缓存穿透
  • 技术革新赋能楼宇自控:物联网云计算推动应用前景深度拓展
  • 饼图:数据可视化的“切蛋糕”艺术
  • 搜索二叉数(c++)
  • 【Leetcode】字符串之二进制求和、字符串相乘
  • PCB板高速飞拍检测系统 助力电子制造自动化领域
  • idea中push拒绝,merge,rebase的区别
  • C++ 单例模式一种实现方式
  • Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比
  • 使用 C++/OpenCV 构建中文 OCR 系统:实现账单、发票及 PDF 读取
  • 云计算处理器选哪款?性能与能效的平衡艺术
  • 动态WCMP+Flowlet ALB:双引擎驱动智算网络负载均衡
  • 【Pandas】pandas DataFrame explode
  • shel脚本重启Jar服务