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++ 核心设计原则

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

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

相关推荐
点云SLAM1 小时前
C++ error C2065: “M_PI”: 未声明的标识符 解决方案
开发语言·c++·error c2065·m_pi未声明 解决方案
爱笑的眼睛112 小时前
超越AdamW:优化器算法的深度实现、演进与自定义框架设计
java·人工智能·python·ai
qq_336313932 小时前
java基础-stream流练习
java·开发语言·python
草莓熊Lotso2 小时前
C++11 核心精髓:类新功能、lambda与包装器实战
开发语言·c++·人工智能·经验分享·后端·nginx·asp.net
欧特克_Glodon2 小时前
C++医学图像处理经典ITK库用法详解<三>: 图像配准模块功能
c++·图像处理·vtk·图像配准
断剑zou天涯2 小时前
【算法笔记】树状数组IndexTree
java·笔记·算法
Paddy哥2 小时前
java 经典循环依赖解决
java
秦苒&2 小时前
【C语言指针四】数组指针变量、二维数组传参本质、函数指针变量、函数指针数组
c语言·开发语言·c++·c#
傅里叶的耶2 小时前
C++ Primer Plus(第6版):第三章 处理数据
开发语言·c++