ocp(open-closed principle,常縮寫為ocp)
「開—閉」原則講的是:乙個軟體實體應當對擴充套件開放,對修改關閉。
software entities should be open for extension,but closed for modification.
1)抽象化是關鍵,給系統定義出乙個一勞永逸、不再更改的抽象設計,此設計允許有無窮無盡的行為在實現層被實現
這個抽象預見了所有的可能擴充套件,這就使得系統的抽象層不需修改,從而滿足了開閉原則的第二條:對修改關閉
同時,由於從抽象層匯出乙個或多個新的具體類可以改變系統的行為,因此系統的設計是對擴充套件開放的,這就滿足
了開閉原則的第一條
2)對可變性的封裝原則
principle of encapsulation of variation,常常略寫為evp
找到乙個系統的可變因素,將之封裝起來
「對可變性的封裝原則」意味著兩點:
(1)一種可變性不應當散落在**的很多角落裡,而應當被封裝到乙個物件裡面
(2)一種可變性不應當與另一種可變性混合在一起。
做到開閉原則有很多規律可循,這些規律同樣以設計原則的身份出現,但是他們都是開閉原則的手段和工具,是附屬於開閉原則
黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現
實現開閉原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體體現,所以黎克特制代換原則是對實現抽象化的具體步驟的規範。
一般而言,違反黎克特制代換原則的,也違背開閉原則,反過來不一定成立。
依賴倒轉原則講的是,要依賴於抽象,不要依賴於實現。
與開閉原則的關係是目標和手段之間的關係。開閉原則是目標,而達到這一目標的手段是依賴倒轉原則。
合成/聚合復用原則講的是,要盡量使用合成/聚合,而不是繼承關係達到復用的目的。
將乙個已經有的物件納入新物件中,使之成為新物件的一部分,新物件可以呼叫引入的舊物件的方法和功能。
優勢:1)新物件訪問成分物件的唯一方法是通過成分物件的介面
2)這種物件的復用是黑箱復用,因為成分物件的內部實現細節對於新的物件是看不見得
3)這種復用支援包裝
4)新物件可以在執行的時候動態的引用與成分物件型別相同的物件
繼承復用的優勢:
1)新的實現較為容易,因為超類的大部分功能可以通過繼承關係自動進入子類。
2)修改或者擴充套件繼承而來的實現比較容易。
繼承復用的缺點:
1)繼承復用破壞包裝。將超類的實現細節暴露給子類。超類的內部細節常常對子類是透明的,白箱復用。
2)超類的實現發生了改變,子類的實現也不得不改變。
3)超類繼承而來的是靜態的,不可能在執行時間內發生改變,因此沒有足夠的靈活性。
迪公尺特法則講的是,乙個軟體實體應當與盡可能少的其他實體發生相互作用。
例子:只與你的朋友們通訊,不要和陌生人說話。
我的乙個好朋友,這個朋友認識很多女孩子,所以我想找女朋友直接找這個朋友就行。
迪公尺特法則能夠減少耦合。類之間的耦合越小,越有利與復用。
介面隔離原則講的是,應當為客戶端提供盡可能小的單獨的介面,而不要提供大的總介面。
OCP開閉原則
bertrand meyer提出此原則 模組應對擴充套件開放,對更改關閉 遵循開 閉原則的設計有兩個主要特性 1 對擴充套件開放 這意味著模組的行為可擴充套件。當需求改變時,可對模組進行擴充套件,使其具有滿足那些改變的新行為,使軟體具有適應性和靈活性。2 對更改關閉 對模組行為進行擴充套件時,不應改...
二 OCP 開閉原則
open close principle 表述 1.乙個軟體實體應當對擴充套件開放 對修改封閉 2.對可變性的封閉原則 3.找到乙個系統的可變因素,將它封閉起來 也就是說在設計乙個模組的時候,應當可以在不被修改的前提下被擴充套件。解決問題的關鍵就在於 抽象化!那就是不允許更改系統的抽象層,而允許擴充...
06 開閉原則 OCP
ocp open close principle 開閉原則 程式中的物件 類 模組 函式等 應該對於擴充套件開放,對於修改是封閉的。降低程式各部分的耦合度 提高 的可復用性 提高軟體的可維護性 解決問題關鍵在於抽象化,抽象化是物件導向設計的第乙個核心本質。在物件導向中,通過抽象類及介面,規定了具體類...