<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
      主站蜘蛛池模板: 国产一级一毛免费黄片| xxx毛茸茸的亚洲| 免费无码精品黄AV电影| 国产精品小视频免费无限app| 亚洲视频欧洲视频| 亚洲国产成人久久综合区| 黄网址在线永久免费观看 | 久久精品免费大片国产大片| 亚洲av永久无码| 亚洲午夜久久影院| 国产偷国产偷亚洲清高动态图| 国产桃色在线成免费视频| 你好老叔电影观看免费| 一级毛片完整版免费播放一区| 亚洲an日韩专区在线| 亚洲色图.com| 亚洲综合伊人制服丝袜美腿| 91亚洲国产成人久久精品| 亚洲成在人线电影天堂色| 99久久婷婷国产综合亚洲| 亚洲精品无码久久久久YW| 亚洲专区中文字幕| 美女露100%胸无遮挡免费观看 | 国产日本一线在线观看免费| 免费无码又黄又爽又刺激| 亚洲男人的天堂一区二区| 中文字幕精品无码亚洲字| 国产亚洲欧洲Aⅴ综合一区| 日韩亚洲人成在线综合日本| 亚洲国产另类久久久精品黑人| 无码欧精品亚洲日韩一区| 色播亚洲视频在线观看| 亚洲色大成网站www永久网站| 婷婷亚洲综合五月天小说在线| 成人a毛片视频免费看| 久久青草免费91观看| 国产精品久久久久免费a∨| 男人的天堂亚洲一区二区三区 | 午夜不卡AV免费| 久久久久av无码免费网| www.亚洲色图.com|