gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          開放-封閉原則(OCP:The Open-Closed Principle)

          設計模式的原則就是OOD的原則,或者說設計模式是為了達到OOD的遠景而提出的,所以真想掌握OO的精髓,學習設計模式是最好的途徑,而想真正掌握設計模式的精髓,就必須好好理解一下OOD的設計原則.
                  OOD原則的一個基石就是“開-閉原則”(Open-Closed Principle OCP)。這個原則最早是由Bertrand Meyer在他的第一版《Object-Oriented Software Construction
          》提出,英文的原文是:Software entities should be open for extension,but closed for modification。A class should be open for extension, but closed for modification.

          Object-Oriented Software Construction 書的封面

          開放-封閉原則:軟件實體(類,模塊,函數等等)應該是可以擴展的,但是不可修改的也就是說,我們在設計一個模塊的時候,可以在不修改這個模塊的前提下來擴展它,也就是,可以在不修改源代碼的情況下擴展這個模塊的行為。

                  滿足OCP的設計給系統帶來兩個無可比擬的優越性.
          •     通過擴展已有的軟件系統,可以提供新的行為,以滿足對軟件的新需求,使變化中的軟件系統有一定的適應性靈活性.
          •     已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的軟件系統有一定的穩定性延續性.

                  具有這兩個優點的軟件系統是一個高層次上實現了復用的系統,也是一個易于維護的系統。那么,我們如何才能做到這個原則呢?不能修改而可以擴展,這個看起來 是自相矛盾的,其實這個是可以做到的,按面向對象的說法,這個就是不允許更改系統的抽象層,而允許擴展的是系統的實現層.

                  解決問題的關鍵在抽象化。我們讓模塊依賴于一個固定的抽象體,這樣它就是不可以修改的;同時,通過這個抽象體派生,我們就可以擴展此模塊的行為功能。如此,這樣設計的程序只通過增加代碼來變化而不是通過更改現有代碼來變化,前面提到的修改的副作用就沒有了。

                  "開-閉"原則如果從另外一個角度講述,就是所謂的"對可變性封裝原則"(Principle of Encapsulation of Variation, EVP)。講的是找到一個系統的可變因素,將之封裝起來。在我們考慮一個系統的時候,我們不要把關注的焦點放在什么會導致設計發生變化上,而是考慮允許什 么發生變化而不讓這一變化導致重新設計。也就是說,我們要積極的面對變化,積極的包容變化,而不是逃避。

            [SHALL01]將這一思想用一句話總結為:"找到一個系統的可變因素,將它封裝起來",并將它命名為"對可變性的封裝原則"。
             

                "對可變性的封裝原則"意味者兩點:

               1.  一種可變性應當被封裝到一個對象里面,而不應當散落到代碼的很多角落里面。同一種可變性的不同表象意味著同一個繼承等級結構中的具體子類。繼承應當被看做是封裝變化的方法,而不應當是被認為從一般的對象生成特殊的對象的方法(繼承經常被濫用)。
               2. 一種可變性不應當與另外一種可變性混合在一起,從具體的類圖來看,如果繼承結構超過了兩層,那么就意味著將兩種不同的可變性混合在了一起。

                  "對可變性的封裝原則"從工程的角度說明了如何實現OCP.如果按照這個原則來設計,那么系統就應當是遵守OCP的.

                  但是現實往往是殘酷的,我們不可能100%的遵守OCP,但是我們要向這個目標來靠近.設計者要對設計的模塊對何種變化封閉做出選擇.

             

            1、英文講解:The Open-Closed Principle

            2、Critique of Bertrand Meyer's
            Object Oriented Software Construction,
            2nd Edition



            posted on 2008-04-18 11:06 gembin 閱讀(1111) 評論(1)  編輯  收藏 所屬分類: 設計模式

            評論

            # re: 開放-封閉原則(OCP:The Open-Closed Principle) 2009-04-11 23:26 Xiaoqing

            good good


              回復  更多評論   

            導航

            統計

            常用鏈接

            留言簿(6)

            隨筆分類(440)

            隨筆檔案(378)

            文章檔案(6)

            新聞檔案(1)

            相冊

            收藏夾(9)

            Adobe

            Android

            AS3

            Blog-Links

            Build

            Design Pattern

            Eclipse

            Favorite Links

            Flickr

            Game Dev

            HBase

            Identity Management

            IT resources

            JEE

            Language

            OpenID

            OSGi

            SOA

            Version Control

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            free counters
            主站蜘蛛池模板: 轮台县| 全椒县| 靖西县| 溧水县| 融水| 黔西县| 长海县| 金堂县| 文安县| 舟山市| 剑阁县| 辛集市| 秦皇岛市| 措勤县| 大安市| 进贤县| 福安市| 安仁县| 揭东县| 鄂尔多斯市| 陵川县| 定结县| 界首市| 谢通门县| 裕民县| 普宁市| 长子县| 文化| 师宗县| 高安市| 合肥市| 抚州市| 张家口市| 秭归县| 息烽县| 扬州市| 聊城市| 德安县| 丹阳市| 通河县| 吉木乃县|