設計模式之6大原則(6)開閉原則

來源:互聯網
上載者:User

標籤:style   http   color   使用   strong   檔案   

開閉原則(OCP)是物件導向設計中“可複用設計”的基石,是物件導向設計中最重要的原則之中的一個,其他非常多的設計原則都是實現開閉原則的一種手段。開閉原則中“開”,是指對於組件功能的擴充是開放的,是同意對其進行功能擴充的;開閉原則中“閉”,是指對於原有代碼的改動是封閉的,即不應該改動原有的代碼。遵循開閉原則設計出的模組具有兩個主要特徵:(1) 對於擴充是開放的(Open for extension)。這意味著模組的行為是能夠擴充的。當應用的需求改變時,我們能夠對模組進行擴充,使其具有滿足那些改變的新行為。也就是說,我們能夠改變模組的功能。(2) 對於修改是關閉的(Closed for modification)。對模組行為進行擴充時,不必修改模組的源碼或者二進位代碼。模組的二進位可運行版本號碼,不管是可連結的庫、DLL或者.EXE檔案,都無需修改。實現開閉原則的關鍵就在於“抽象”。把系統的全部可能的行為抽象成一個抽象底層,這個抽象底層規定出全部的詳細實現必須提供的方法的特徵。作為系統設計的抽象層,要預見全部可能的擴充,從而使得在不論什麼擴充情況下,系統的抽象底層不需改動;同一時候,因為能夠從抽象底層匯出一個或多個新的詳細實現,能夠改變系統的行為,因此系統設計對擴充是開放的。我們在軟體開發的過程中,一直都是提倡需求導向的。這就要求我們在設計的時候,要很清楚地瞭解使用者需求,推斷需求中包括的可能的變化,從而明白在什麼情況下使用開閉原則。勃蘭特·梅耶一般被覺得一旦完畢,一個類的實現僅僅應該因錯誤而改動,新的或者改變的特性應該通過建立不同的類實現。建立的類能夠通過繼承的方式來重用原類的代碼。衍生的子類能夠或不能夠擁有和原類同樣的介面。梅耶的定義提倡實現繼承。詳細實現能夠通過繼承方式來重用,可是介面規格不必如此。已存在的實現對於改動是封閉的,可是新的實現不必實現原有的介面。在20世紀90年代,開閉原則被廣泛的又一次定義因為抽象化介面的使用,在這中間實現能夠被改變,多種實現能夠被建立,而且多態化的替換不同的實現。相比梅耶的使用方式,多態開閉原則的定義倡導對抽象基類的繼承。介面規約能夠通過繼承來重用,可是實現不必重用。已存在的介面對於改動是封閉的,而且新的實現必須實現那個介面。假設一個軟體系統符合開閉原則的,那麼從軟體project的角度來看,它至少具有這種優點:可複用性好。我們能夠在軟體完畢以後,仍然能夠對軟體進行擴充,添?新的功能,很靈活。因此,這個軟體系統就能夠通過不斷地添加?新的組件,來滿足不斷變化的需求。可維護性好。因為對於已有的軟體系統的組件,特別是它的抽象底層不去改動,因此,我們不用操心軟體系統中原有組件的穩定性,這就使變化中的軟體系統有一定的穩定性和延續性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.