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

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

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

相关推荐
alonewolf_996 分钟前
深入解析G1与ZGC垃圾收集器:原理、调优与选型指南
java·jvm·算法
小镇学者7 分钟前
【c++】C++字符串删除末尾字符的三种实现方法
java·开发语言·c++
rfidunion8 分钟前
springboot+VUE+部署(1。新建项目)
java·vue.js·spring boot
小翰子_9 分钟前
Spring Boot整合Sharding-JDBC实现日志表按月按周分表实战
java·spring boot·后端
weixin_3993806917 分钟前
OA 系统假死问题分析与优化
java·运维
豆沙沙包?36 分钟前
2026年--Lc334-2130. 链表最大孪生和(链表转数组)--java版
java·数据结构·链表
ue星空40 分钟前
R3注入反截图
c++
柒.梧.43 分钟前
SSM常见核心面试问题深度解析
java·spring·面试·职场和发展·mybatis
塔尖尖儿1 小时前
For循环中++i与i++有什么不一样?
c++
GISer_Jing1 小时前
AI:多智能体协作与记忆管理
人工智能·设计模式·aigc