posts - 262,  comments - 221,  trackbacks - 0

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

          一、Composite模式的定義

          將對象以樹形結構組織起來,以達成“部分-整體” 的層次結構,使得客戶端對單個對象和組合對象的使用具有一致性.

          二、Composite模式的特點

          Composite比較容易理解,想到Composite就應該想到樹形結構圖。組合體內這些對象都有共同接口,當組合體一個對象的方法被調用執行時,Composite將遍歷(Iterator)整個樹形結構,尋找同樣包含這個方法的對象并實現調用執行。可以用牽一動百來形容。

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

          三、Composite好處

          1.使客戶端調用簡單,客戶端可以一致的使用組合結構或其中單個對象,用戶就不必關系自己處理的是單個對象還是整個組合結構,這就簡化了客戶端代碼。
          2.更容易在組合體內加入對象部件. 客戶端不必因為加入了新的對象部件而更改代碼。

          四、如何使用Composite

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

              ---- 以上內容摘自Jdon網站的《Gof 23種設計模式》系列文章

          五、Composite模式的分析

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

          ·Composite模式的特點:
             ·Composite模式一般都有一個抽象類或接口來表示最基本的構件。
             ·Composite模式一般都由兩類對象構成:表示單個元素的對象(Primitive)和表示多個元素組合的對象(Composite)
             ·Composite模式下Primitive和Composite對象都繼承或實現上層接口或父類
             ·Composite模式下每個構件都含有三個基礎方法:add(構件)、remove(構件)、iterator()
             ·Composite對象含有一個用來保存其下所有基礎元素的的集合,例如:Vector,ArrayList,HashMap
             ·Composite對象的方法被調用時一般都會引起其下所有基礎元素相同方法的調用,即遞歸調用。

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

          ·客戶端調用Composite模式的代碼示例:
             ·創建一個原子構件對象
             ·創建一個組合構件對象
             ·調用組合構件對象的add/remove方法添加/刪除對象
             ·調用組合夠對象的iteratore方法迭代顯示對象


          下一節我們將采用一個真實的示例來演示Composite的使用

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

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 靖江市| 安陆市| 屏南县| 普格县| 济源市| 桐乡市| 惠水县| 南皮县| 贡山| 将乐县| 六安市| 新化县| 怀安县| 安达市| 苍南县| 五大连池市| 吉木萨尔县| 辛集市| 佛学| 武隆县| 修水县| 辽阳市| 新竹市| 皋兰县| 汝城县| 平泉县| 镇雄县| 垦利县| 北安市| 雷州市| 专栏| 宜城市| 镇坪县| 大宁县| 温宿县| 海林市| 婺源县| 太康县| 漯河市| 甘孜县| 荆州市|