天天看點

設計模式六大原則——開放封閉原則(OCP)      什麼是開閉原則?   怎麼使用開閉原則?

      定義:是說軟體實體(類、子產品、函數等等)應該可以擴充,但是不可修改。

      開閉原則主要展現在兩個方面:

      1、對擴充開放,意味着有新的需求或變化時,可以對現有代碼進行擴充,以适應新的情況。

    2、對修改封閉,意味着類一旦設計完成,就可以獨立其工作,而不要對類盡任何修改。

    實作開放封閉的核心思想就是對抽象程式設計,而不對具體程式設計,因為抽象相對穩定。讓類依賴于固定的抽象,是以對修改就是封閉的;而通過面向對象的繼承和多态機制,可以實作對抽象體的繼承,通過覆寫其方法來改變固有行為,實作新的擴充方法,是以對于擴充就是開放的。 

   對于違反這一原則的類,必須通過重構來進行改善。常用于實作的設計模式主要有template method模式和strategy 模式。而封裝變化,是實作這一原則的重要手段,将經常變化的狀态封裝為一個類。

    以銀行業務員為例 :

    沒有實作ocp設計的:  

這種設計顯然是存在問題的,目前設計中就隻有存款,取款和轉賬三個功能,将來如果業務增加了,比如增加申購基金功能,理财功能等,就必須要修改bankprocess業務類。我們分析上述設計就能發現不能把業務封裝在一個類裡面,違反單一職責原則,而有新的需求發生,必須修改現有代碼則違反了開放封閉原則。

    如何才能實作耦合度和靈活性兼得呢? 

  那就是抽象,将業務功能抽象為接口,當業務員依賴于固定的抽象時,對修改就是封閉的,而通過繼承和多态繼承,從抽象體中擴充出新的實作,就是對擴充的開放。

一下是符合ocp的設計:  

這樣當業務變更時,隻需要修改對應的業務實作類就可以,其他不相幹的業務就不必修改。當業務增加,隻需要增加業務的實作就可以了。  

繼續閱讀