C++ 设计模式&设计原则

C++ 设计模式

1. 创建型模式 (Creational Patterns)

模式 用途 关键点
Singleton(单例) 保证类只有一个实例,并提供全局访问点 懒加载、线程安全、全局访问
Factory Method(工厂方法) 定义创建对象的接口,让子类决定实例化哪一个类 接口+子类实现、解耦对象创建
Abstract Factory(抽象工厂) 创建一系列相关或依赖对象 提供接口创建多类产品族
Builder(建造者) 将复杂对象的构建与表示分离 分步构建、支持不同表现
Prototype(原型) 通过复制已有对象创建新对象 clone 方法、减少 new 依赖

2. 结构型模式 (Structural Patterns)

模式 用途 关键点
Adapter(适配器) 转换接口,使类可用 类适配/对象适配、解耦客户端与被适配类
Bridge(桥接) 抽象与实现分离 抽象类持有实现接口,支持独立变化
Composite(组合) 组成树形结构表示部分-整体 统一对待叶子和组合对象
Decorator(装饰器) 动态添加对象职责 透明包装、增强功能
Facade(外观) 简化子系统接口 提供统一接口,降低复杂度
Flyweight(享元) 共享对象,减少内存占用 内部状态共享、外部状态独立
Proxy(代理) 控制对象访问 访问控制、延迟加载、保护

3. 行为型模式 (Behavioral Patterns)

模式 用途 关键点
Observer(观察者) 一对多依赖,状态变化通知 发布-订阅、解耦
Strategy(策略) 封装算法,可互换 算法接口+具体实现
Command(命令) 封装请求为对象 请求参数化、队列化、日志
Iterator(迭代器) 顺序访问聚合对象 隐藏内部结构、统一访问方式
Template Method(模板方法) 定义算法骨架,子类实现部分步骤 算法复用、可扩展步骤
Mediator(中介者) 封装对象间交互 减少耦合、集中控制
State(状态) 对象行为随状态改变 状态类封装行为,Context 管理
Chain of Responsibility(责任链) 请求沿链传递,直到处理 松耦合、动态链路
Visitor(访问者) 封装操作,作用于对象结构 对象数据结构与操作分离

C++设计原则

1. SOLID 原则

原则 含义 关键点
S - Single Responsibility Principle (单一职责原则) 一个类只负责一类职责 每个类/模块只做一件事,修改原因单一
O - Open/Closed Principle (开闭原则) 对扩展开放,对修改封闭 新功能通过扩展实现,不修改已有代码
L - Liskov Substitution Principle (里氏替换原则) 子类应能替换父类 子类对象可以替代父类对象而不破坏程序
I - Interface Segregation Principle (接口隔离原则) 多个专门接口优于单一总接口 使用小接口,避免冗余实现
D - Dependency Inversion Principle (依赖倒置原则) 高层模块不依赖低层模块,二者依赖抽象 依赖抽象而非具体类,降低耦合

2. 其他常用设计原则

原则 含义 关键点
DRY (Don't Repeat Yourself) 避免重复代码 提取公共功能,减少重复实现
KISS (Keep It Simple, Stupid) 保持设计简单 简单优于复杂,易理解易维护
YAGNI (You Aren't Gonna Need It) 不要过度设计 只实现当前需要功能,不做未来臆想功能
Law of Demeter (最少知识原则) 只和直接朋友通信 减少对象间耦合,不调用链式对象的方法
Composition over Inheritance (组合优于继承) 优先使用对象组合而非类继承 更灵活,降低耦合,易扩展
Favor Polymorphism over Conditionals 优先使用多态而非条件分支 通过虚函数/接口替代大量 if/switch

3. C++ 特有的设计注意点

原则/习惯 含义 关键点
RAII (Resource Acquisition Is Initialization) 资源管理与对象生命周期绑定 析构自动释放资源,如智能指针、锁管理
Rule of 0 / 3 / 5 拷贝/移动操作规范 如果需要自定义析构、拷贝、移动等操作,要遵循规则
Const Correctness 使用 const 修饰不可变对象 增强可读性,防止误修改
Prefer Smart Pointers over Raw Pointers 使用智能指针管理动态资源 避免内存泄漏,提高异常安全性
Avoid Naked new/delete 避免手动 new/delete 用容器或智能指针管理资源
** noexcept 使用** 明确函数不抛异常 有助于优化和安全资源释放

总结

  • SOLID + DRY/KISS/YAGNI + RAII/Rule of 0/5/3 是现代 C++ 核心设计原则

  • 这些原则的目标是:高内聚、低耦合、易扩展、易维护

  • 实际项目中,设计模式 + 设计原则结合使用效果最好

相关推荐
aqiu1111117 小时前
【C++算法打怪专栏】8. 字符串转换整数 (atoi)
开发语言·c++·算法
h397412 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
程序猿编码14 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客14 小时前
vs 怎么根据dll 生成lib文件
c++·qt
代码什么用15 小时前
Spring基础使用
java·后端·spring
程序员老陆15 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
Su米苏16 小时前
Spring AI 中MCP 与普通 @Tool的区别
java·人工智能·spring
码云数智-园园16 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
老板一杯拿铁16 小时前
Java 异常体系详解:从字节码原理到最佳实践
java
蜗牛互联网16 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端