posts - 262,  comments - 221,  trackbacks - 0

          注:本文部分摘自www.jdon.com的《Gof 23種設(shè)計(jì)模式解析》的Composite模式一章

          一、Composite模式的定義

          將對(duì)象以樹形結(jié)構(gòu)組織起來(lái),以達(dá)成“部分-整體” 的層次結(jié)構(gòu),使得客戶端對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性.

          二、Composite模式的特點(diǎn)

          Composite比較容易理解,想到Composite就應(yīng)該想到樹形結(jié)構(gòu)圖。組合體內(nèi)這些對(duì)象都有共同接口,當(dāng)組合體一個(gè)對(duì)象的方法被調(diào)用執(zhí)行時(shí),Composite將遍歷(Iterator)整個(gè)樹形結(jié)構(gòu),尋找同樣包含這個(gè)方法的對(duì)象并實(shí)現(xiàn)調(diào)用執(zhí)行。可以用牽一動(dòng)百來(lái)形容。

          所以Composite模式使用到Iterator模式,和Chain of Responsibility模式類似。

          三、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ì)象部件而更改代碼。

          四、如何使用Composite

          首先定義一個(gè)接口或抽象類,這是設(shè)計(jì)模式通用方式了,其他設(shè)計(jì)模式對(duì)接口內(nèi)部定義限制不多,Composite卻有個(gè)規(guī)定,那就是要在接口內(nèi)部定義一個(gè)用于訪問(wèn)和管理Composite組合體的對(duì)象們(或稱部件Component).

              ---- 以上內(nèi)容摘自Jdon網(wǎng)站的《Gof 23種設(shè)計(jì)模式》系列文章

          五、Composite模式的分析

          ·Composite模式的結(jié)構(gòu):
          基類/接口(構(gòu)件抽象)
              |
              |--- 原子構(gòu)件(extends 基類 / implements 接口)
              |
              |--- 組合構(gòu)件(extends 基類 / implements 接口)
                         |--- 原子構(gòu)件1
                         |--- 原子構(gòu)件2
                         |--- 組合構(gòu)件3
                         |--- 原子構(gòu)件3-1
                                  |--- 原子構(gòu)件3-2

          ·Composite模式的特點(diǎn):
             ·Composite模式一般都有一個(gè)抽象類或接口來(lái)表示最基本的構(gòu)件。
             ·Composite模式一般都由兩類對(duì)象構(gòu)成:表示單個(gè)元素的對(duì)象(Primitive)和表示多個(gè)元素組合的對(duì)象(Composite)
             ·Composite模式下Primitive和Composite對(duì)象都繼承或?qū)崿F(xiàn)上層接口或父類
             ·Composite模式下每個(gè)構(gòu)件都含有三個(gè)基礎(chǔ)方法:add(構(gòu)件)、remove(構(gòu)件)、iterator()
             ·Composite對(duì)象含有一個(gè)用來(lái)保存其下所有基礎(chǔ)元素的的集合,例如:Vector,ArrayList,HashMap
             ·Composite對(duì)象的方法被調(diào)用時(shí)一般都會(huì)引起其下所有基礎(chǔ)元素相同方法的調(diào)用,即遞歸調(diào)用。

          ·Composite模式中Primitive對(duì)象和Composite對(duì)象的方法區(qū)別:
             ·add(構(gòu)件):如果是基礎(chǔ)對(duì)象,則此方法直接返回false,如果是組合對(duì)象,則先添加新構(gòu)件然后返回true
             ·remove(構(gòu)件):如果是基礎(chǔ)對(duì)象,則此方法直接返回false,如果是組合對(duì)象,則先刪除構(gòu)件然后返回true
             ·iterator():如果是基礎(chǔ)對(duì)象,則此方法直接返回null,如果是組合對(duì)象,則返回一個(gè)包含所有對(duì)象的集合

          ·客戶端調(diào)用Composite模式的代碼示例:
             ·創(chuàng)建一個(gè)原子構(gòu)件對(duì)象
             ·創(chuàng)建一個(gè)組合構(gòu)件對(duì)象
             ·調(diào)用組合構(gòu)件對(duì)象的add/remove方法添加/刪除對(duì)象
             ·調(diào)用組合夠?qū)ο蟮膇teratore方法迭代顯示對(duì)象


          下一節(jié)我們將采用一個(gè)真實(shí)的示例來(lái)演示Composite的使用

          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2008-01-21 09:55 Paul Lin 閱讀(3140) 評(píng)論(0)  編輯  收藏 所屬分類: 模式與重構(gòu)
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點(diǎn)博客

          好友博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 屏南县| 安阳市| 镇雄县| 闽侯县| 晋江市| 奈曼旗| 巢湖市| 永年县| 民乐县| 天津市| 宁安市| 孟津县| 阿拉善盟| 沙河市| 大荔县| 犍为县| 宾川县| 喀什市| 太仓市| 玛多县| 崇义县| 祁连县| 古交市| 武定县| 莲花县| 丰镇市| 东兰县| 黄山市| 泸西县| 敦化市| 邵阳县| 方山县| 望城县| 博野县| 汉沽区| 安阳市| 汉源县| 泸定县| 辽阳市| 和龙市| 扬州市|