隨筆-126  評論-247  文章-5  trackbacks-0

          所謂的開閉原則(Open-Closed Principle,簡稱 OCP)說的是:
          軟件實體(類、模塊、功能等)應該可以被擴展,但不可被修改。

          開閉原則說白了就是,應該在不修改現有代碼的基礎上,引入新功能。

          開閉原則中的“開”,是指對于組件功能的擴展是開放的,是允許對其進行功能擴展的;開閉原則中的“閉”,是指對于原有代碼的修改是封閉的,即不應該修改原有的代碼。

          而實際上,要做到百分之百的封閉是不可能的,但是在系統設計的時候,還是應該盡量做到這一點。


          一個簡單的例子,假設現在需要實現一個加法的功能,很簡單,如圖示1:


          現在的問題是,需求變了,要求還要實現一個減法的功能,這也很簡單,如圖示2:


          如果需求再變,還要求能實現乘法和除法的功能,依然簡單,如圖示3:


          從第2和第3步來看,很明顯,在需求改變,需要引進新的功能的時候,做法是在已有的類的基礎上通過新添方法來實現功能,假設在第2步之后,第3步的時候發現加法和減法功能
          最終都沒有用到,反而乘法和除法需要用到,那么在第3步的時候就要推翻第2步之前的實現,在需求發生改變需要引進新的功能的時候,就要推翻整個之前的系統,很明顯這樣的做法
          是不可取的,說明設計上出現了問題,這個缺陷明顯的是違反了OCP(開閉原則)。
          需求總是在變的,如果可能,就要做到盡量不要去修改已有的實現,而應該通過擴展的手段來穩定需求的變動。

          OCP原則替換圖2:


          OCP原則替換圖3:


          在我們最初編寫代碼的時候,我們假設變化不會發生,但最后變化發生的時候,可以通過創建抽象來隔離以后將要發生的同類變化。

          開閉原則是面向對象設計中“可復用設計”的基礎,是面向對象設計中最重要的原則之一。 從開閉原則中可以看出,面對對象的重要原則是創建抽象化,并且從抽象化中導出

          具體化,具體化可以有許多不同的版本,而每個不同的版本可以給出不同的實現。



            
          posted on 2012-08-02 11:03 fancydeepin 閱讀(871) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 巨野县| 龙川县| 博兴县| 河西区| 丰原市| 海盐县| 宾川县| 治多县| 松桃| 修水县| 南陵县| 北安市| 福州市| 岢岚县| 新竹县| 敦煌市| 北流市| 商河县| 昌图县| 威信县| 太湖县| 加查县| 垦利县| 二连浩特市| 洪洞县| 兴宁市| 浪卡子县| 辰溪县| 偏关县| 嘉鱼县| 姜堰市| 乐昌市| 衡阳县| 博客| 布尔津县| 丁青县| 普陀区| 辽源市| 额敏县| 长子县| 峡江县|