设计原则(一)"开-闭"原则(OCP)

页面导航:首页 > 软件编程 > Java编程 > 设计原则(一)"开-闭"原则(OCP)

设计原则(一)"开-闭"原则(OCP)

来源: 作者: 时间:2016-01-21 09:39 【

经典力学的基石是牛顿三大定律。而面向对象的可复用设计的第一块基石,便是所谓的开-闭原则(Open-Closed Principle,常缩写为OCP)。一、什么是开闭原则开-闭原则讲的是:一个软件实体

经典力学的基石是牛顿三大定律。而面向对象的可复用设计的第一块基石,便是所谓的”开-闭“原则(Open-Closed Principle,常缩写为OCP)。

一、什么是开闭原则

“开-闭”原则讲的是:一个软件实体应当对扩展开放,对修改关闭。这一原则最早由Bertrand Meyer提出,英文原文是:

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

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

二、使用开闭原则有什么好处

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

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

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

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

三、如何做到符合开闭原则

我们来看一下在《西游记》中玉皇大帝在美猴王的挑战下是怎样维护天庭的秩序的。

当年大闹天宫时的美猴王便是玉帝天庭的新挑战。美猴王说:“皇帝轮流做,明年到我家。只教他搬出去,将天宫让与我!”对于这项挑战,太白金星给玉皇大帝提出的建议是:“臣启陛下……降一道招安圣旨,把他宣来上界……与他籍名在篆……一则不动众劳师,二则收仙有道也。”

换言之,不劳师动众、不破坏天规便是“闭”,收仙有道便是“开”。招安之法便是玉帝天庭的“开-闭”原则,通过给美猴王封一个“弼马温”的官职,便可使现有系统满足了变化的需求,而不必更改天庭的既有秩序,如下图所示。

这里写图片描述

招安之法的关键便是不允许更改现有的天庭秩序,但允许将妖猴纳入现有的之中,从而扩展了这一秩序。用面相对象的语言来讲,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层。<喎"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxzdHJvbmc+s+nP87uvyse52Lz8PC9zdHJvbmc+PC9wPg0KPHA+veK+9s7KzOK1xLnYvPzU2tPas+nP87uvoaPU2s/xamF2YdXi0fm1xMPmz/K21M/zseCzzNPv0dTA78Pmo6y/ydLUuPjPtc2z0ru49tK7wM3TwNLdoaKyu9TZuMSx5LXEs+nP88novMajrLjDyei8xtTK0O3T0M7ex+7O3r6htcTQ0M6q1NrKtc/WsuOxu8q1z9aho9TaamF2YdPv0dTA76Osv8nS1Lj4s/bSu7j2u/K24Lj2s+nP82phdmHA4Lvy1d9qYXZhvdO/2qOsuea2qLP2y/nT0LXEvt/M5cDgsdjQ68zhuam1xLe9t6i1xMzY1ffX986qz7XNs8novMa1xLPpz/Oy46Gj1eK49rPpz/Oy49SkvPvBy8v509C1xL/JxNzAqdW5o6zS8rTLo6zU2sjOus7H6b/2z8K2vLK7u+G4xLHkoaPV4sq5tcPPtc2ztcSz6c/zsuOyu9Do0qrQ3rjEo6y007b4wvrX48HLJmxkcXVvO7+qLbHVJnJkcXVvO9St1PK1xLXatv7M9aO6ttTQ3rjEudix1aGjPC9wPg0KPHA+zazKsaOs08nT2rTTs+nP87Ljtbyz9rXE0ru49rvytuC49tDCtcS+38zlwOC/ydLUuMSx5M+1zbO1xNDQzqqjrNLytMvPtc2ztcTJ6LzGttTAqdW5yse/qrfFtcSjrNXivs3C+tfjwcsmbGRxdW87v6otsdUmcmRxdW871K3U8rXEtdrSu8z1o7q21MCp1bm/qrfFoaM8L3A+DQo8cD48c3Ryb25nPrbUv8mx5NDUtcS34tewPC9zdHJvbmc+PC9wPg0KPHA+v7zCx8TjtcTJ6LzG1tDT0Mqyw7S/ycTcu+G3osn6seS7r6Gj1eLSu8u8z+vTw9K7vuS7sNfcveHOqqO6JmxkcXVvO9XStb3Su7j2z7XNs7XEv8mx5NLyy9ijrL2ry/y34tewxvDAtCZyZHF1bzuhozwvcD4NCjxwPtXi0uLOttfFwb2146O6PC9wPg0KPHA+MaGi0rvW1r/JseTQ1LK706a4w8miwuTU2rT6wuu1xLrctuC9x8LkwO+jrLb406a4w7G7t+LXsLW90ru49rbUz/PA78PmoaPNrNK71ta/ybHk0NS1xLK7zayx7c/z0uLOttfFzazSu7j2vMyz0LXIvLa94bm51tC1xL7fzOXX08DgoaM8L3A+DQo8cD4yoaLSu9bWv8mx5NDUsrvTprjD0+vB7dK71ta/ybHk0NS77LrP1NrSu8bwoaM8L3A+DQo8aDIgaWQ9"四结语">四、结语

尽管很多情况下,无法百分之百的做到“开-闭”原则,但是如果向这个方向上的努力能够得到部分的成功,也可以显著地改善一个的结构。

Tags:

相关文章

    文章评论

    最 近 更 新
    热 点 排 行
    Js与CSS工具
    代码转换工具
    
    <