<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 閱讀(1078) 評論(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
      主站蜘蛛池模板: 性色av免费观看| 亚洲欧洲无码AV电影在线观看 | 日本免费一本天堂在线| 国产精品亚洲天堂| 国产∨亚洲V天堂无码久久久| 8x成人永久免费视频| 青青青亚洲精品国产| 国产亚洲AV无码AV男人的天堂| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 亚洲1区2区3区精华液| 亚洲区小说区激情区图片区| 日韩免费a级毛片无码a∨| caoporn国产精品免费| 激情综合亚洲色婷婷五月| 亚洲午夜福利精品久久| 男女免费观看在线爽爽爽视频| 又黄又大的激情视频在线观看免费视频社区在线 | 无码精品A∨在线观看免费| 综合一区自拍亚洲综合图区| 亚洲国产日韩一区高清在线 | 国产免费小视频在线观看| 久久久久久国产精品免费无码| 久久亚洲精品无码av| 78成人精品电影在线播放日韩精品电影一区亚洲 | 亚洲Av无码精品色午夜| 国产精品免费_区二区三区观看| 久久午夜免费鲁丝片| 一级黄色片免费观看| 亚洲一区二区三区丝袜| 亚洲日本中文字幕| 中文字幕亚洲图片| 国产在线ts人妖免费视频| 精品成在人线AV无码免费看| 国产特黄特色的大片观看免费视频 | 每天更新的免费av片在线观看 | 亚洲成a人无码亚洲成www牛牛| 久久精品国产亚洲AV无码麻豆| 国产偷窥女洗浴在线观看亚洲 | 亚洲国产成人精品女人久久久 | 美女视频免费看一区二区| 亚洲性线免费观看视频成熟|