OCP开闭原则

OCP,software entities(modules,classes,functions,etc.)should be openfor extension, but closed for modification.

软件实体(模块、类和方法等)应该对扩展开发,对修改关闭。

OCP特点

提高可扩展性:新功能通过添加新的类或模块来实现,而不是修改已有的代码,使得系统更容易扩展和维护。

示例代码

不符合OCP的代码

java 复制代码
public class FinancialReporter {  
    public FinancialReport show(ReportRequester) {  
        //  
    }
}

使用 OCP 优化后的代码

java 复制代码
public interface FinancialReportPresenter {  
    FinancialReport show(ReportRequester);  
}  

public class ScreenPresenter implements FinancialReportPresenter {  
    public FinancialReport show(ReportRequester) {  
        // 
    }  
}  
public class PrintPresenter implements FinancialReportPresenter {  
    public FinancialReport show(ReportRequester) {  
        //   
    }  
}  

实现开闭原则的方法

开闭原则就是解决代码的扩展性 问题。为了实现代码的扩展性,我们需要扩展意识、抽象意识和封装意识。在详细设计时,我们需要思考:对于这个功能点,未来可能有哪些需求变更 ,从而预留扩展点

我们通过多态、依赖注入、基于接口而非实现编程等思想和方法提高代码扩展性。

在设计模式中,策略、适配器、观察者和模板方法模式实践开闭原则。

注意事项

对于短期内可能进行的扩展,需求变更对代码结构影响比较大的扩展,或者实现成本不高的扩展,我们可以事先进行可扩展性设计。其他情况的扩展性设计,都可以等到需要的时候,重构当前代码提高可扩展性。

代码的扩展性与代码的可读性是有冲突的。因此在项目上,要根据项目、团队等情况,综合平衡扩展性和可读性。

不允许修改一行代码?

对于同一个修改,在不同层次,可以是修改,也可以是扩展。例如,在用户类中,添加地址属性。在属性层次是扩展,在类层次,是修改。结论是,不破坏原有代码的正常运行和原有的单元测试,即可认为满足未修改代码。

尽量让修改操作集中在上层代码中,让核心、通用的代码满足开闭原则。这也是DDD设计的原则。

OCP与架构设计

OCP是系统架构设计的主导原则,因此没有按照SOLID顺序进行介绍,而是第一个原则进行说明 。主要目标是让系统易扩展,同时限制每次修改所影响的范围。实现方式是通过将系统划分为一系列组件,并且将这些组件间的依赖关系按层次结构进行组织,使得高阶组件不会因低阶组件被修改而受到影响。

参考

《架构整洁之道》-- Robert C.Mattin

《设计模式之美》-- 王争

相关推荐
是温不嗜温8 天前
芯茂微 LP7012 双重过流保护机制拆解:DESAT 单次锁存 vs OCP 连续 5 次锁存有何区别?
嵌入式硬件·开闭原则·电源管理·电源芯片·ac-dc
艾利克斯冰10 天前
Java设计模式详解-七大设计原则(持续更新中)
设计模式·uml·开闭原则
计算机安禾24 天前
【c++面向对象编程】第37篇:面向对象设计原则(一):单一职责与开闭原则
开发语言·c++·开闭原则
S1998_1997111609•X1 个月前
Phash的系统通信工程及恶意注入污染蜜罐轮替探测阻断正常通讯协议系统的dog 通用原理及行为阻击至联合国管理清理全栈
安全·百度·哈希算法·量子计算·开闭原则
S1998_1997111609•X1 个月前
哈希树函数洪水泛滥污染孪生镜像导致生物量子信息泄露以钩子而爬虫植入ssd探测
爬虫·网络协议·缓存·哈希算法·开闭原则
S1998_1997111609•X1 个月前
电容〇解临界过流恶意注入污染寄生的边缘锯齿噪声污染孪生
安全·百度·哈希算法·量子计算·开闭原则
S1998_1997111609•X1 个月前
恶意烧录级系统固件开源á进行函数值哈希泛滥污染孪生以钩子而爬虫合规系统的性能指标体系技术应用内存
安全·百度·哈希算法·量子计算·开闭原则
S1998_1997111609•X1 个月前
元组件HCG&&单元量泄露数据爬虫植入syatem,造成系统ioc dark and agent of China gov 的犯罪心理学依据行为
网络协议·安全·百度·哈希算法·开闭原则
S1998_1997111609•X1 个月前
论述情况盀导致系统应用通信通讯协议被恶意注入污染蜜罐开元盀用于非法侵入爬虫植入ssd的通用技术原理
网络·网络协议·百度·哈希算法·开闭原则
S1998_1997111609•X1 个月前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.
数据库·网络协议·百度·ssh·开闭原则