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

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

          開閉原則說白了就是,應(yīng)該在不修改現(xiàn)有代碼的基礎(chǔ)上,引入新功能。

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

          而實際上,要做到百分之百的封閉是不可能的,但是在系統(tǒng)設(shè)計的時候,還是應(yīng)該盡量做到這一點。


          一個簡單的例子,假設(shè)現(xiàn)在需要實現(xiàn)一個加法的功能,很簡單,如圖示1:


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


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


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

          OCP原則替換圖2:


          OCP原則替換圖3:


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

          開閉原則是面向?qū)ο笤O(shè)計中“可復(fù)用設(shè)計”的基礎(chǔ),是面向?qū)ο笤O(shè)計中最重要的原則之一。 從開閉原則中可以看出,面對對象的重要原則是創(chuàng)建抽象化,并且從抽象化中導(dǎo)出

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



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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 瑞金市| 延津县| 阿拉善左旗| 芮城县| 赤水市| 华安县| 澄城县| 松原市| 浙江省| 西平县| 喀喇| 龙山县| 富民县| 清镇市| 革吉县| 垫江县| 邻水| 秭归县| 乡城县| 桓台县| 巢湖市| 北京市| 措美县| 宣城市| 元朗区| 湘潭市| 绥中县| 绥阳县| 满洲里市| 和平区| 进贤县| 邵阳市| 鄂托克前旗| 嘉黎县| 丹阳市| 阜南县| 郸城县| 湘乡市| 德州市| 揭西县| 天水市|