开闭原则

讲解视频链接: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

     

 

posted @ 2020-03-22 16:44  kkkyl  阅读(334)  评论(0)    收藏  举报