Java設計模式之基本原則(二)

上一篇我們介紹了單一職責 原則:http://blog.csdn.net/u010590685/article/details/47011803
今天我們來說說另外一個原則:開放封閉原則
中國有個成語叫縱橫捭闔,其中捭闔的意思就是開合的意思。
《捭闔》是《鬼谷子》的開篇之作。捭爲開啓,闔爲閉藏。捭闔之術,也就是開合有道、張弛有度。捭闔之術是世間萬物運轉的根本,也是縱橫家遊說的重要說術言略。既然萬物都要開合有道,我們寫代碼對什麼開放對什麼封閉也是有規則的,這就是我們今天要說的開發封閉原則
定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
通常我們再做一個項目時系統的需求可能會發生變化,如果說需求一旦發生變化就把整個項目重新再來顯然是不合理也不划算的,所以就要我們在設計的時候運用開放封閉原則,遇到需求功能我們通過新增類,接口等來擴展功能而不是修改原理的這樣當我們的需求發生變化時,我們爲變化的部分增加一個類或者接口之類的就可以,下次再變化我們增加一個該接口的實現或者繼承這個類,這樣代碼的就變得清晰易維護了。下面我們舉個例子
比如,剛開始需求只是寫加法程序,很快在client類中完成後,此時變化沒有發生,需求讓再添加一個減法功能,此時會發現增加功能需要修改原來這個類,這就違背了開放-封閉原則,於是你就應該考慮重構程序,增加一個抽象的運算類,通過一些面向對象的手段,如繼承、動態等來隔離具體加法、減法與client耦合,需求依然可以滿足,還能應對變化。此時需求要添加乘除法功能,就不需要再去更改client及加減法類,而是增加乘法和除法子類即可。
但是我們也要認識到絕對的封閉式不存在的,正如古人說說孤陽不生,孤陰不長。絕對的修改關閉是不可能的,無論模塊是多麼的‘封閉‘,都會存在一些無法對之封閉的變化,既然不可能完全封閉,設計人員必須對於他設計的模塊應該對哪種變化封閉做出選擇。他必須先猜測出最有可能發生的變化種類,然後構造抽象來隔離那些變化。在我們最初編寫代碼時,假設變化不會發生,當變化發生時,我們就創建抽象來隔離以後發生同類的變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章