open-close principle
表述:1. 乙個軟體實體應當對擴充套件開放 , 對修改封閉;
2. 對可變性的封閉原則;
3. 找到乙個系統的可變因素,將它封閉起來;
也就是說在設計乙個模組的時候,應當可以在不被修改的前提下被擴充套件。解決問題的關鍵就在於:抽象化!
那就是不允許更改系統的抽象層,而允許擴充套件系統的實現層。
我們讓模組依賴於乙個固定的抽象體,這樣它就是不可以修改的;同時,通過這個抽象體派生,我們就可以擴充套件此模組的具體功能。這樣設計的程式只通過增加**來變化而不是通過更改現有**來變化,前面提到的修改的***就沒有了。「開
-閉」原則如果從另外乙個角度講述,就是
「找到乙個系統的可變因素,將它封裝起來
」,也即所謂的
「對可變性的封裝原則
」(principle of encapsulation of variation, evp)
。在我們考慮乙個系統的時候,我們不要把關注的焦點放在什麼會導致設計發生變化上(具體),而是考慮允許什麼發生變化而不讓這一變化導致重新設計(抽象)。
也就是說,我們的設計應支援變化。
總結:1.乙個軟體系統的所有模組不可能都滿足
ocp,但是我們應該努力最小化這些不滿足
ocp的模組數量。
2.開放-封閉法則是
oo設計的真正核心。
3.符合該法則便意味著最高等級的復用性(
reusability
)和可維護性(
maintainability
)。策略模式舉例:商場打折,不同物品不同折扣,不同季節不同折扣
「對可變性的封裝原則」意味著兩點:
1.一種可變性應當被封裝到乙個物件裡面,而不應當散落到**的很多角落裡。
同一種可變性的不同表象意味著同乙個繼承等級結構中的具體子類。
繼承應當被看作是封裝變化的方法,而不應當是被認為從一般的物件生成特殊的物件的方法
(繼承經常被濫用)。
2.一種可變性不應當與另外一種可變性混合在一起。從具體的類圖來看,如果繼承結構超過了兩層,那麼就意味著將兩種不同的可變性混合在了一起。
「對可變性的封裝原則」從工程的角度說明了如何實現
ocp。如果按照這個原則來設計,那麼系統就應當是遵守
ocp的。但是現實的情況往往是紛繁複雜的,我們不可能
100%
的遵守ocp
,但是我們要向這個目標來靠近。設計者要對設計的模組對何種變化進行封裝做出選擇。
OCP開閉原則
bertrand meyer提出此原則 模組應對擴充套件開放,對更改關閉 遵循開 閉原則的設計有兩個主要特性 1 對擴充套件開放 這意味著模組的行為可擴充套件。當需求改變時,可對模組進行擴充套件,使其具有滿足那些改變的新行為,使軟體具有適應性和靈活性。2 對更改關閉 對模組行為進行擴充套件時,不應改...
開閉原則 OCP
ocp open closed principle,常縮寫為ocp 開 閉 原則講的是 乙個軟體實體應當對擴充套件開放,對修改關閉。software entities should be open for extension,but closed for modification.1 抽象化是關鍵,...
06 開閉原則 OCP
ocp open close principle 開閉原則 程式中的物件 類 模組 函式等 應該對於擴充套件開放,對於修改是封閉的。降低程式各部分的耦合度 提高 的可復用性 提高軟體的可維護性 解決問題關鍵在於抽象化,抽象化是物件導向設計的第乙個核心本質。在物件導向中,通過抽象類及介面,規定了具體類...