设计模式开闭原则(OCP)

开闭原则英文全称是Open-Closed Principle,常缩写为OCP。"开-闭"原则讲的是:一个软件实体应当对扩展开放,对修改关闭。这一原则最早是由Bertrand Meyer[MEYER88]提出,英文原文是:Software entities should be open for extension, but closed for modification.

开闭原则英文全称是Open-Closed Principle,常缩写为OCP。"开-闭"原则讲的是:

一个软件实体应当对扩展开放,对修改关闭。

这一原则最早是由Bertrand Meyer[MEYER88]提出,英文原文是:

Software entities should be open for extension, but closed for modification.

这个原则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。

所有的软件系统都有一个共同的性质,即对它们的需求都会随时间的推移而发生变化。在软件系统面临新的需求时,系统的设计必须是稳定的。满足"开-闭"原则的设计可以给一个软件系统带来两个优越性:

  • 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。

  • 已有的软件模块,特别是最重要的抽象层模块不能在修改,这就使变化中的软件系统有一定的稳定性和延续性。

具有这两个优点的软件系统是一个在高层次上实现了复用的系统,也是一个易于维护的系统。

怎样做到"开-闭"原则

乍看起来,不能修改而可以扩展似乎是自相矛盾的。怎么可以同时又不修改、而又可扩展呢?

解决问题的关键在于抽象化。在像Java语言这样的面向对象的编程语言里面,可以给系统定义出一个一劳永逸、不再更改的抽象设计,此设计允许有无穷无尽的行为在实现层被实现。在Java语言里,可以给出一个或多个抽象Java类或Java接口,规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层。

抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变。这就使得系统的抽象层不需修改,从而满足了"开-闭"原则的第二条:对修改关闭。

同时,由于从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展的开放的,则就满足了"开-闭"原则的第一条。

"开-闭"原则实例

在工厂方法模式中,具体工厂类都有共同的接口,它们"生产"出很多的处于一个等级结构中的产品对象。使用这个设计的系统可以允许向系统加入新的产品类型,而不必修改已有的代码,只需要再加入一个相应的新的具体工厂类就可以了。如下图:

设计模式开闭原则(OCP)

上图中是工厂方法模式类图。其中,所有的具体工厂都实现了相同的抽象工厂;同时,所有的具体产品都实现相同的抽象产品。因此,需要添加新的具体产品和具体工厂,只需要重新编写一个新的具体工厂和具体产品即可。

换言之,对于增加新的产品类而言,这个系统完全支持"开-闭"原则。

我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。 —— 列宁
1 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号