隨筆-37  評(píng)論-58  文章-4  trackbacks-0
                組合模式:將對(duì)象以樹形結(jié)構(gòu)組織起來,以達(dá)成“部分-整體” 的層次結(jié)構(gòu),使得客戶端對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性.
          適用環(huán)境:

          u       你想表示對(duì)象的部分-整體層次結(jié)構(gòu)。

          u       你希望用戶忽略組合對(duì)象與單個(gè)對(duì)象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對(duì)象。

          Composite好處:
          1.使客戶端調(diào)用簡(jiǎn)單,客戶端可以一致的使用組合結(jié)構(gòu)或其中單個(gè)對(duì)象,用戶就不必關(guān)系自己處理的是單個(gè)對(duì)象還是整個(gè)組合結(jié)構(gòu),這就簡(jiǎn)化了客戶端代碼。
          2.更容易在組合體內(nèi)加入對(duì)象部件. 客戶端不必因?yàn)榧尤肓诵碌膶?duì)象部件而更改代碼。

          組合模式的組成

                 抽象構(gòu)件角色Component:它為組合中的對(duì)象聲明接口,也可以為共有接口實(shí)現(xiàn)缺省行為。

                 樹葉構(gòu)件角色Leaf:在組合中表示葉節(jié)點(diǎn)對(duì)象——沒有子節(jié)點(diǎn),實(shí)現(xiàn)抽象構(gòu)件角色聲明的接口。

                 樹枝構(gòu)件角色Composite:在組合中表示分支節(jié)點(diǎn)對(duì)象——有子節(jié)點(diǎn),實(shí)現(xiàn)抽象構(gòu)件角色聲明的接口;存儲(chǔ)子部件。

          下圖為組合模式的類圖表示。
          comp1.bmp
          安全性與透明性

             組合模式中必須提供對(duì)子對(duì)象的管理方法,不然無法完成對(duì)子對(duì)象的添加刪除等等操作,也就失去了靈活性和擴(kuò)展性。但是管理方法是在Component中就聲明還是在Composite中聲明呢?

             一種方式是在Component里面聲明所有的用來管理子類對(duì)象的方法,以達(dá)到Component接口的最大化(如下圖所示)。目的就是為了使客戶看來在接口層次上樹葉和分支沒有區(qū)別——透明性。但樹葉是不存在子類的,因此Component聲明的一些方法對(duì)于樹葉來說是不適用的。這樣也就帶來了一些安全性問題。
             另一種方式就是只在Composite里面聲明所有的用來管理子類對(duì)象的方法(如下圖所示)。這樣就避免了上一種方式的安全性問題,但是由于葉子和分支有不同的接口,所以又失去了透明性。
            《設(shè)計(jì)模式》一書認(rèn)為:在這一模式中,相對(duì)于安全性,我們比較強(qiáng)調(diào)透明性。對(duì)于第一種方式中葉子節(jié)點(diǎn)內(nèi)不需要的方法可以使用空處理或者異常報(bào)告的方式來解決。
          如何使用Composite?

          posted on 2007-08-30 10:14 楓中玎玲 閱讀(295) 評(píng)論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 浮山县| 余干县| 县级市| 页游| 东乌| 长泰县| 安康市| 介休市| 东乌珠穆沁旗| 天台县| 上蔡县| 桃江县| 浏阳市| 梁山县| 临沭县| 额济纳旗| 柳林县| 中阳县| 西畴县| 天峨县| 德州市| 左云县| 和田县| 田东县| 汾阳市| 麦盖提县| 巫溪县| 乌拉特后旗| 普洱| 沾化县| 同仁县| 根河市| 宁明县| 沧州市| 灵璧县| 诸城市| 陆丰市| 长葛市| 扶绥县| 临湘市| 湛江市|