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

來源:互聯網
上載者:User

開閉原則OCP(Open-Close Principle)被稱作是OOD的基石,是OOD最重要的原則之一。

這個原則由大師Bertrand Meyer在1988年提出(汗,那個時候恐怕國內還很少人知道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的實現方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.