「開一閉」原則講的是:乙個軟體實體應當對擴充套件開放,對修改關閉。這一原則最早由bertrand meyer [meyer88]提出,英文原文是:
software entities should be open for extension, but closed for modification.
書中列出 玉帝招安美猴王 的例子,換言之,不勞師動眾、不破壞天規便是「閉」,收仙有道便是「開」。招安之法便是玉帝天庭的「開一閉」原則,通過給美猴王封乙個「弼馬溫」的官職,便可使現有系統滿足變化了的需求,而不必更改天庭的既有秩序,如下圖所示。
這個例子舉的非常棒,非常直觀的看出是在系統中加乙個模組,而不是更改原有模組。
根本還是在於抽象化!
儘管在很多情況下,無法百分之百地做到「開一閉」原則,但是如果向這個方向上的
努力能夠得到部分的成功,也可以顯著地改善乙個系統的結構。
黎克特制代換原則中說,
黎克特制代換原則是對
任何基類可以出現的地方,子類一定可以出現。
關鍵步驟就是抽象化。
「開一閉」原則的補充。正如前面所談到的,實現
而基類與子類的繼承關係就是抽象化的具體體現,
「開一閉」原則的
所以黎克特制代換原
則是對實現抽象化的具體步驟的規範。
合成/聚合復用原則講的是,要盡量使用合成/聚合,而不是繼承關係達到復用的目的。
顯然,合成/聚合復用原則是與黎克特制代換原則相輔相成的,兩者又都是對實現「開一閉」
原則的具體步驟的規範。前者要求設計師首先考慮合成/聚合關係,後者要求在使用繼承
關係時,必須確定這個關係是符合一定條件的。
遵守合成/聚合復用原則是實現「開一閉」原則的必要條件;違反這一原則就無法使系
統實現「開一閉」原則這一目標。
迪公尺特法則講的是,乙個軟體實體應當與盡可能少的其他實體發生相互作用。
當乙個系統面臨功能擴充套件的時候,其中會有一些模組,它們需要修改的壓力比其他一
些模組要大。最後的結果可能是這些模組需要修改或者不需要修改。但是不論是哪一種情
況,如果這些模組是相對孤立的,那麼它們就不會將修改的壓力傳遞給其他的模組。
這就是說,乙個遵守迪公尺特原則設計出來的系統在功能需要擴充套件時,會相對更容易地
做到對修改的關閉。也就是說,迪公尺特法則是一條通向「開一閉」原則的道路。
Java與模式 「開 閉」原則
開 閉 原則講的是 乙個軟體實休應當對擴充套件開放,對修改關閉,這一原則最早同bertrand meyer提出,英文原文是 software entities should be open for extension,but closed for modification.這個原則所說是,在設計乙個...
讀書筆記 設計模式原則
這段時間通過 大話設計模式 這本書對物件導向設計,設計模式有了基本的認識,尤其是書中的案例由淺入深,讓設計模式更加易於理解。為此整理了讀書筆記,以增加對書中內容了理解。單一職責原則 封閉 開放原則 依賴倒轉原則 黎克特制代換原則 迪公尺特法則 合成 聚合復用原則 單一職責原則 乙個類應該僅有乙個引起...
《Java與模式》讀書筆記1(1 11)
開閉原則 open close principle ocp softeware entities should be open for extension,but closed for modification.黎克特制代換原則 liskov substitution principle lsp 如...