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

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

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

    結構模式之Composite——合成(部分-整體)模式

    1、簡介
       
    結構模式將對象以樹形結構組織起來,以達成部分-整體的層次結構,使得客戶端對單個對象和組合對象的使用具有一致性。結構模式有時候又叫做部分-整體模式,它使我們樹型結構的問題中,模糊了簡單元素和復雜元 素的概念,客戶程序可以向處理簡單元素一樣來處理復雜元素,從而使得客戶程序與復雜元素的內部結構解耦。

       
    合成模式的實現根據所實現接口的區別分為兩種形式,分別稱為安全模式透明模式。合成模式可以不提供父對象的管理方法,但合成模式必須在合適的地方提供子對象的管理方法(諸如:add、remove、getChild等)。

       
    透明方式
       
    作為第一種選擇,在Component里面聲明所有的用來管理子類對象的方法,包括add()、remove(),以及getChild()方法。這樣做 的好處是所有的構件類都有相同的接口。在客戶端看來,樹葉類對象與合成類對象的區別起碼在接口層次上消失了,客戶端可以同等同的對待所有的對象。這就是透 明形式的合成模式。
       
    這個選擇的缺點是不夠安全,因為樹葉類對象和合成類對象在本質上是有區別的。樹葉類對象不可能有下一個層次的對象,因此add()、remove()以及getChild()方法沒有意義,是在編譯時期不會出錯,而只會在運行時期才會出錯。

       
    安全方式
       
    第二種選擇是在Composite類里面聲明所有的用來管理子類對象的方法。這樣的做法是安全的做法,因為樹葉類型的對象根本就沒有管理子類對象的方法,因此,如果客戶端對樹葉類對象使用這些方法時,程序會在編譯時期出錯。
       
    這個選擇的缺點是不夠透明,因為樹葉類和合成類將具有不同的接口。

       
    這兩個形式各有優缺點,需要根據軟件的具體情況做出取舍決定。

    2
    、使用場景及能解決的問題
       
    需要描述對象的部分和整體的等級結構。
       
    需要客戶端忽略掉個體構件和組合構件的區別。客戶端必須平等對待所有的構件,包括個體構件和組合構件。
       
    下面看一個實際的例子:算術表達式。算術表達式包括操作數、操作符和另一個操作數。操作數可以是數字,也可以是另一個表達式。這樣,2+3和(2+3+4*6)都是合法的表達式。


     3、類圖


        下面看看兩種不同的實現方式的合成模式對應的類圖

         安全方式:


         透明方式:


    4、優缺點

        優點:
        合成模式可以很容易地增加新種類的構件。
        使用合成模式可以使客戶端變得很容易設計,因為客戶端不需要知道構件是樹葉構件還是樹枝構件。
        缺點:
        使用合成模式后,控制樹枝構件的類型就不太容易。
        用繼承的方法來增加新的行為很困難。

       


    posted on 2008-06-23 22:29 云淡風清 閱讀(404) 評論(0)  編輯  收藏 所屬分類: Design Patterns

    <2008年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(15)

    隨筆檔案(15)

    收藏夾(1)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲高清视频在线播放| 亚洲乱码中文字幕在线| 国产精品免费精品自在线观看| 亚洲乱妇老熟女爽到高潮的片| 亚洲国产精品成人AV无码久久综合影院 | 国产精品综合专区中文字幕免费播放| 亚洲国产精品一区二区久久hs| 亚洲乱码在线播放| 国产国产人免费视频成69大陆| 久久精品免费大片国产大片| 亚洲国产精品人久久电影| 免费**毛片在线播放直播| 精品一区二区三区无码免费视频 | 日韩精品在线免费观看| 亚洲欧美国产国产综合一区| 亚洲色偷偷偷鲁综合| 最近免费中文字幕视频高清在线看| 亚洲无砖砖区免费| 亚洲 综合 国产 欧洲 丝袜 | 亚洲av成人一区二区三区在线观看| 久久免费视频精品| 羞羞的视频在线免费观看| 99久久亚洲精品无码毛片 | 亚洲精品免费网站| 在线播放高清国语自产拍免费| 中文字幕在线免费看| 亚洲日韩精品国产3区| 亚洲宅男永久在线| 亚洲日韩在线观看免费视频| 久久久久国色AV免费观看性色 | 97在线视频免费公开视频| 亚洲精品乱码久久久久蜜桃| 亚洲视频一区在线| 亚洲中文久久精品无码| 99精品视频免费| 国产亚洲精品免费| 亚洲Av高清一区二区三区| 亚洲精品免费观看| 亚洲精品午夜无码电影网| 999任你躁在线精品免费不卡| 激情综合亚洲色婷婷五月APP|