开闭原则
讲解视频链接:https://www.bilibili.com/video/BV1J7411U7ce/
1.起源与定义
开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。这个原则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换一句话说,就是可以在不被修改源代码的情况下改变这个模块的行为。

2.实现
为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在Java、C#等 编程语言中,可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现 层中完成。在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系 统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何 改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩 展系统的功能,达到开闭原则的要求。使用一个例子来进一步了解。
软件公司开发的一个系统可以显示各种类型的图表,如饼状图和柱状图等,为了支持多种图表显示方式,设计方案如图1所示。

1 public abstract class AbstractChar { 2 3 public abstract void display(); 4 5 } 6 7 public class CharDisplay { 8 9 private AbstractChar ch; 10 11 public void setCh(AbstractChar ch) { 12 this.ch = ch; 13 } 14 public void setChar(AbstractChar ch) 15 { 16 //...... 17 } 18 19 } 20 21 public class PieChar extends AbstractChar{ 22 23 @Override 24 public void display() { 25 //...... 26 } 27 28 } 29 30 public class BarChar extends AbstractChar{ 31 32 @Override 33 public void display() { 34 //...... 35 } 36 37 }
3.优点
满足开闭原则的设计可以给一个软件系统两个无可比拟的优越性:一是通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,是变化中的软件系统有一定的适应性和灵活性;二是已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。具有这两个优点的软件系统是一个在高层次上实现了复用的系统,也是一个易于维护的系统。
参考链接:http://c.biancheng.net/view/1322.html
https://blog.csdn.net/qq_35241080/article/details/84496650

浙公网安备 33010602011771号