<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(1077) 評論(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
      主站蜘蛛池模板: 无码免费又爽又高潮喷水的视频 | 日本人护士免费xxxx视频| 亚洲国产精品无码久久久秋霞2 | 51视频精品全部免费最新| 亚洲国产精品无码久久久秋霞2| A毛片毛片看免费| 成人午夜亚洲精品无码网站| 无人视频免费观看免费视频| 亚洲精品天堂成人片?V在线播放| 免费大片黄在线观看| 亚洲精品视频免费观看| 中国黄色免费网站| 亚洲人JIZZ日本人| 亚洲午夜免费视频| 亚洲激情视频图片| 国产福利免费在线观看| 一个人看www免费高清字幕| 久久亚洲国产中v天仙www| 中文免费观看视频网站| 亚洲精品无码久久久久牙蜜区| 国产乱弄免费视频| 91国内免费在线视频| 2022年亚洲午夜一区二区福利| 国产免费久久精品99re丫y| 亚洲一区二区三区高清在线观看| 在线观看免费精品国产| 国内精品99亚洲免费高清| 亚洲mv国产精品mv日本mv| 国产小视频在线免费| 免费国产99久久久香蕉| 激情综合亚洲色婷婷五月| 亚洲国产中文v高清在线观看| 国产免费网站看v片在线| 在线a亚洲老鸭窝天堂av高清| 亚洲国产成人精品91久久久| 久久爰www免费人成| 亚洲国产成人手机在线观看| 亚洲色精品aⅴ一区区三区| 无码人妻一区二区三区免费手机| 天堂亚洲免费视频| 亚洲国产av一区二区三区丶|