設計模式 OOD的設計原則 1 開 閉原則

2021-04-01 08:51:06 字數 1190 閱讀 5697

這些ood原則的乙個基石就是"開-閉原則"(open-closed principle ocp).這個原則最早是由bertrand meyer提出,英文的原文是:software entities should be open for extension,but closed for modification.意思是說,乙個軟體實體應當對擴充套件開放,對修改關閉.也就是說,我們在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件,換句話說就是,應當可以在不必修改源**的情況下改變這個模組的行為.

滿足ocp的設計給系統帶來兩個無可比擬的優越性.

具有這兩個優點的軟體系統是乙個高層次上實現了復用的系統,也是乙個易於維護的系統.那麼,我們如何才能做到這個原則呢?不能修改而可以擴充套件,這個看起來是自相矛盾的.其實這個是可以做到的,按物件導向的說法,這個就是不允許更改系統的抽象層,而允許擴充套件的是系統的實現層.

解決問題的關鍵在:抽象化.我們讓模組依賴於乙個固定的抽象體,這樣它就是不可以修改的;同時,通過這個抽象體派生,我們就可以擴充套件此模組的行為功能.如此,這樣設計的程式只通過增加**來變化而不是通過更改現有**來變化,前面提到的修改的***就沒有了.

"開-閉"原則如果從另外乙個角度講述,就是所謂的"對可變性封裝原則"(principle of encapsulation of variation, evp).講的是找到乙個系統的可變因素,將之封裝起來.在我們考慮乙個系統的時候,我們不要把關注的焦點放在什麼會導致設計發生變化上,而是考慮允許什麼發生變化而不讓這一變化導致重新設計.也就是說,我們要積極的面對變化,積極的包容變化,而不是逃避.

[shall01]將這一思想用一句話總結為:"找到乙個系統的可變因素,將它封裝起來",並將它命名為"對可變性的封裝原則".

"對可變性的封裝原則"意味者兩點:

一種可變性應當被封裝到乙個物件裡面,而不應當散落到**的很多角落裡面.同一種可變性的不同表象意味著同乙個繼承等級結構中的具體子類.繼承應當被看做是封裝變化的方法,而不應當是被認為從一般的物件生成特殊的物件的方法(繼承經常被濫用).

一種可變性不應當與另外一種可變性混合在一起.從具體的類圖來看,如果繼承結構超過了兩層,那麼就意味著將兩種不同的可變性混合在了一起.

"對可變性的封裝原則"從工程的角度說明了如何實現ocp.如果按照這個原則來設計,那麼系統就應當是遵守ocp的.

但是現實往往是殘酷的,我們不可能100%的遵守ocp,但是我們要向這個目標來靠近.設計者要對設計的模組對何種變化封閉做出選擇.

OOD設計原則之開閉原則(OCP)

開閉原則ocp open close principle 被稱作是ood的基石,是ood最重要的原則之一。這個原則由大師bertrand meyer在1988年提出 汗,那個時候恐怕國內還很少人知道oo,甚至計算機為何物 software entities should be open for ex...

OOD設計原則之開閉原則(OCP)

開閉原則ocp open close principle 在維基百科的定義 在物件導向程式設計中,開閉原則規定 軟體中的物件 類,模組,函式等等 應該對擴充套件是開放的,但是對於修改是封閉的 這意味著乙個實體是允許在不改變他的源 的前提下變更他的行為。勃蘭特丶梅耶一般被認為是最早提出開閉原則這一術語...

設計模式 開閉原則

開閉原則的核心是 對擴充套件開放,對修改關閉 白話意思就是我們改變乙個軟體時 比如擴充套件其他功能 應該通過擴充套件的方式來達到軟體的改變,而不應愛修改原有 來實現變化 軟體系統中包含的各種元件,例如模組 modules 類 classes 以及功能 functions 等等,應該在不修改現有 的基...