架构整洁之道-05 设计原则-开闭原则OCP

简介: 开闭原则 Open Closed Principie ,OCP软件实体的行为应当不是修改实体,而是对实体进行扩展。

开闭原则

由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。

开闭原则 Open Closed Principie ,OCP

软件实体的行为应当不是修改实体,而是对实体进行扩展。

比如,有一个财务报表系统,已实现了财务数据的滚动,且负数显示红色的。但工作人员需要打印此报表数据,且需要对报表数据有其他格式要求。如果要满足这样的需求,需要考虑下,是否需要写新代码,老代码需要变更多少呢?

通过单一原则SRP进行实现,把计算财务数据,数据显示,打印数据的划分到不同职责中。通过分离后,还需要确认源码的依赖关系,确保变化之后不会影响到其他的组件,然后新功能的实现可以通过OCP原则,不进行修改而是通过扩展设计来完成实现。

实现方法

通过 “抽象约束、封装变化” 来实现开闭原则。使用抽象类或接口为实体定义一个稳定的抽象层,而可变的因素都封装在具体的实现类中。

所以,当软件发生变化时,只需要根据需求重新派生出一个实现类来扩展,严格遵守开闭原则。

abstract class Subject {
  display():void {}
} 
​
class Subject1 {
  display() {
    console.log('具体类1实现。。。')
  }
}
​
class Subject12{
  display() {
    console.log('具体类2实现。。。')
  }
}

开闭原则优点

  • 对软件测试的影响:OCP原则是扩展设计,所以原有功能保持不变,那么软件测试时可以只测试扩展的部分
  • 提高代码的可复用性:粒度越小,被复用的可能性越大
  • 提供软件的可维护性:开闭原则使得软件的稳定性和延续性更高,这样就更易扩展和维护

开闭原则缺点

  • 实现类多的话,容易导致需要过多维护不同具体类
  • 容易导致衍生过度设计

场景介绍

比较熟悉的场景就是:插件和中间件。设计者将插件和中间件的扩展能力开发给使用者就必须遵守开闭原则。

所以,开闭原则的目标是让系统不发生重大的修改而易于扩展。这个目标是通过分割系统成各个组件,规划组件的依赖层级关系,保护高层级避免受低层级组件影响实现的。

参考资料:

目录
相关文章
|
6天前
|
前端开发 Java 测试技术
使用整洁架构优化你的 Gradle Module
使用整洁架构优化你的 Gradle Module
44 0
|
7月前
|
存储 Go 数据处理
Go 语言整洁架构实践
Go 语言整洁架构实践
56 0
|
8月前
|
存储 数据库 开发者
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
|
9月前
|
设计模式 关系型数据库
软件架构设计原则之里氏替换原则
里氏替换原则(Liskov Substitution Principle,LSP)是指如果对每一个类型为T1的对象o1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都替换成O2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。
57 0
|
9月前
|
设计模式 关系型数据库
软件架构设计原则之迪米特法则
迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。迪米特原则主要强调:只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以称为成员朋友类,而出现在方法体内部的类不属于朋友类。
71 1
|
11月前
|
安全
带你读《阿里云卓越架构白皮书》——1、安全设计原则(1)
带你读《阿里云卓越架构白皮书》——1、安全设计原则(1)
395 0
|
11月前
|
安全
带你读《阿里云卓越架构白皮书》——1、安全设计原则(2)
带你读《阿里云卓越架构白皮书》——1、安全设计原则(2)
364 0
|
11月前
带你读《阿里云卓越架构白皮书》——2、设计原则
带你读《阿里云卓越架构白皮书》——2、设计原则
291 0
|
11月前
带你读《阿里云卓越架构白皮书》——1、设计原则
带你读《阿里云卓越架构白皮书》——1、设计原则
248 0
|
11月前
带你读《阿里云卓越架构白皮书》——1、卓越运营设计原则(1)
带你读《阿里云卓越架构白皮书》——1、卓越运营设计原则(1)
189 0