二 OCP 開閉原則

2021-08-29 21:35:04 字數 1223 閱讀 6035

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 開閉原則 程式中的物件 類 模組 函式等 應該對於擴充套件開放,對於修改是封閉的。降低程式各部分的耦合度 提高 的可復用性 提高軟體的可維護性 解決問題關鍵在於抽象化,抽象化是物件導向設計的第乙個核心本質。在物件導向中,通過抽象類及介面,規定了具體類...