设计模式的核心追求?就是为什么说开闭原则 (OCP)
为什么说开闭原则 (OCP) 是设计模式的核心追求?
在上一章节内容我们提到----“OCP原则是设计模式的核心追求,其他原则是完成OCP原则的具体手段!”
在此,我想针对这句话进行展开谈论和分析! (关注不迷路哈!!!)
文章目录
前言
- 在软件设计的世界里,开闭原则(Open-Closed Principle,OCP) 常被誉为 “设计模式的基石”。
- 甚至可以这么说,其他原则是“工具”,而 OCP 原则是 “目标”!
| 原则 | 核心作用 | C++技术手段 | 对OCP的核心支持 |
|---|---|---|---|
| 单一职责(SRP) | 职责隔离:一个类仅承担单一功能 | 单一接口+独立类实现 | 通过职责拆分减少耦合,易于扩展 |
| 依赖倒置(DIP) | 抽象依赖:高层模块依赖抽象接口 | 纯虚函数+多态调用 | 利用抽象接口隔离变化,实现“扩展点” |
| 里氏替换(LSP) | 行为一致性:子类可完全替换父类 | 继承+重写 | 确保扩展类与原有类兼容,且不会破坏原有逻辑 |
| 接口隔离(ISP) | 接口精简:按功能拆分接口避免臃肿 | 细粒度接口+组合实现 | 避免接口冗余,精准扩展所需功能 |
| 迪米特法则(LoD) | 最小耦合:对象间保持最小知识 | 依赖注入+中间层 | 减少类间直接耦合,提升扩展灵活性 |
一、为什么 OCP 原则如此要紧?
提示:深刻理解 OCP原则 的定义与精髓
OCP 原则的定义是什么?
OCP原则 由 Bertrand Meyer(1988) 提出,并由 Robert C. Martin(Uncle Bob)进一步推广,其核心定义是:
“软件实体(类、模块、函数等)应该对扩展开放(Open for Extension),对修改关闭(Closed for Modification)。”
简单来说:
✅ 可以新增功能(扩展) → 通过继承、接口、策略模式等方式;
❌ 不能修改已有代码(修改) → 核心逻辑保持稳定。
OCP 原则的精髓是什么?
用抽象(接口/抽象类)定义扩展点,用多态实现灵活扩展,避免直接修改已有的稳定代码。
OCP 原则为何如此重要?
减少回归测试:修改旧代码可能引入Bug,而扩展新代码不会影响已有功能。
提高可维护性:核心逻辑稳定,新功能通过扩展实现,代码更清晰。
增强灵活性:系统可以适应需求变化,而不需要重构旧代码。
二、OCP原则如何让代码更优雅?
提示:通过对比设计方案来加以说明
假设原本有一个图形绘制系统,最初只支持圆形(Circle) 和 矩形(Rectangle),但未来要考虑支持三角形(Triangle)。
1. 错误设计案例(硬编码逻辑途径导致强耦合)❌
class ShapeDrawer
{
public:
void drawShape(const std::string& shapeType) {
if (shapeType == "Circle") {
drawCircle();
} else if (shapeType == "Rectangle") {
drawRectangle();
}
// 新增 Triangle 时必须修改此函数(方法)!
}
private:
void drawCircle() {
/* 绘制圆形 */
}
void drawRectangle() {
/* 绘制矩形 */
}
};
违反OCP原则的表现:
浙公网安备 33010602011771号