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

2021-08-29 17:21:35 字數 1112 閱讀 3991

[size=medium]開閉原則ocp(open-close principle)被稱作是ood的基石,是ood最重要的原則之一。

這個原則由大師bertrand meyer在2023年提出(汗,那個時候恐怕國內還很少人知道oo,甚至計算機為何物):software entities should be open for extension,but closed for modification。多簡單啊?!這個原則的意思大概是說:軟體對擴充套件應該是開發的,對修改應該是關閉的。說的更通俗點兒,就是說我們開發了乙個軟體,應該可以對它進行功能擴充套件(開放),而在進行這些擴充套件的時候,不需要對原來的程式進行修改(關閉)!

為什麼會有這樣的要求呢?如果乙個軟體是符合ocp原則的,那麼至少,我們有兩個極大的好處:

1.在軟體可用性上,非常靈活。你可以在軟體完成對軟體進行擴充套件,加入新的功能。這樣,這個軟體就可以通過不斷的增加新模組滿足不斷變化的新需求!

2.由於對軟體原來的模組不能修改,因此不用擔心軟體的穩定性。

目前,對ocp的實現,主要的一條就是抽象,就是我們常常掛在嘴邊的要面向抽象(介面)。把系統的所有可能的行為抽象成乙個抽象底層,這個抽象底層規定出所有的具體類必須提供的方法的特徵作為系統設計的抽象層,這個抽象層要預見所有可能的擴充套件,從而使得在任何擴充套件情況下,系統的抽象層不需修改;同時由於可以從抽象層匯出乙個或多個新的具體類可改變系統的行為,因此對於可變的部分,系統設計對擴充套件是開放的。

關於系統可變的部分,還有乙個更具體的對可變性封裝原則(principle of encapsulation of variation, evp),從工程實現的角度對開閉原則進行了進一步的解釋。evp要求在做系統設計的時候,對系統所有可能(或允許)發生變化的部分進行評估和分類,每乙個可變的因素都單獨進行封裝。

我們很容易就可以想到,在設計的開始就羅列系統所有可能的行為加入到抽象底層是不可能的(實際上也是不合算的),對所有的可變因素進行預計和封裝也不太現實,因此,開閉原則很難被完全實現,只能在某些模組、某種程度上、某個限度內符合ocp的要求。所以可以說,ocp具有理想主義的色彩,是ood的終極目標。因此,針對ocp的實現方法,許多ood的大師都費盡心機,研究ocp的實現方式。後面要提到的黎克特制代換原則、合成復用原則,依賴倒轉原則,介面隔離原則,抽象類,迪公尺特法則等,都可以看作是ocp的實現方法。[/size]

設計模式原則 開放 封閉原則

定義 軟體實體應該是可以擴充套件,但是不可修改,對擴充套件開放,對更改封閉 場景 某公司需要招聘3類員工,分別是 主管,程式設計師,銷售。公司根據不同的員工的需求,配置不同的資源。比如程式設計師應該配台電腦。首先定義乙個 員工型別 列舉 using system using system.colle...

設計模式之開放封閉原則

親愛的博友們,感謝來到darren的部落格 最近一直很忙,今天抽空開了一下開放封閉原則,再這裡和各位分享一下學習心得 開放封閉原則 軟體實體 類,模組,函式 等等,對於擴充套件是開放的,對於修改是封閉的。對於程式設計而言,怎麼的設計才能面對需求的改變卻可以保持相對的穩定,從而可以使得系統可以再第乙個...

設計模式之開放封閉原則

public inte ce ibankprocess public class depositprocess ibankprocess public class withdrawprocess ibankprocess public class transferprocess ibankproce...