設計原則(一)"開-閉"原則(OCP)
經典力學的基石是牛頓三大定律。而物件導向的可複用設計的第一塊基石,便是所謂的”開-閉“原則(Open-Closed Principle,常縮寫為OCP)。
一、什麼是開閉原則
“開-閉”原則講的是:一個軟體實體應當對擴充開放,對修改關閉。這一原則最早由Bertrand Meyer提出,英文原文是:
Software entities should be open for extension,but closed for modification.
這個原則說的是,在設計一個模組的時候應該使這個模組可以在不被修改的前提下被擴充。換言之,應該可以在不必修改原始碼的情況下改變這個模組的行為。
二、使用開閉原則有什麼好處
所有的軟體系統都有一個共同的性質,即對他們的需求會隨著時間的推移而發生變化。在軟體系統面臨新的需求的時候,系統的設計必須是穩定的。滿足“開-閉”原則的設計可以給一個軟體系統兩個無可比擬的優越性:
1、通過擴充已有的軟體系統,可以提供新的行為,以滿足對軟體的新的需求,使變化中的軟體系統有一定的適應性和靈活性。
2、已有的軟體模組,特別是最重要的抽象層模組不能再修改,這就使變化中的軟體系統有一定的穩定性和延續性。
具有以上兩個優點的軟體系統是一個在高層次上實現了複用的系統,也是一個易於維護的系統。
三、如何做到符合開閉原則
我們來看一下在《西遊記》中玉皇大帝在美猴王的挑戰下是怎樣維護天庭的秩序的。
當年大鬧天宮時的美猴王便是玉帝天庭的新挑戰。美猴王說:“皇帝輪流做,明年到我家。只教他搬出去,將天宮讓與我!”對於這項挑戰,太白金星給玉皇大帝提出的建議是:“臣啟陛下……降一道招安聖旨,把他宣來上界……與他籍名在篆……一則不動眾勞師,二則收仙有道也。”
換言之,不勞師動眾、不破壞天規便是“閉”,收仙有道便是“開”。招安之法便是玉帝天庭的“開-閉”原則,通過給美猴王封一個“弼馬溫”的官職,便可使現有系統滿足了變化的需求,而不必更改天庭的既有秩序,如所示。
招安之法的關鍵便是不允許更改現有的天庭秩序,但允許將妖猴納入現有的之中,從而擴充了這一秩序。用面相對象的語言來講,不允許更改的是系統的抽象層,而允許擴充的是系統的實現層。<喎?http://www.bkjia.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"四結語">四、結語
儘管很多情況下,無法百分之百的做到“開-閉”原則,但是如果向這個方向上的努力能夠得到部分的成功,也可以顯著地改善一個系統的結構。