设计模式的核心追求?就是为什么说开闭原则 (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原则的表现:

posted @ 2025-08-09 13:30  yjbjingcha  阅读(14)  评论(0)    收藏  举报