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

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

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

    posts - 262,  comments - 221,  trackbacks - 0

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

    一、Composite模式的定義

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

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

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

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

    三、Composite好處

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

    四、如何使用Composite

    首先定義一個(gè)接口或抽象類,這是設(shè)計(jì)模式通用方式了,其他設(shè)計(jì)模式對接口內(nèi)部定義限制不多,Composite卻有個(gè)規(guī)定,那就是要在接口內(nèi)部定義一個(gè)用于訪問和管理Composite組合體的對象們(或稱部件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è)抽象類或接口來表示最基本的構(gòu)件。
       ·Composite模式一般都由兩類對象構(gòu)成:表示單個(gè)元素的對象(Primitive)和表示多個(gè)元素組合的對象(Composite)
       ·Composite模式下Primitive和Composite對象都繼承或?qū)崿F(xiàn)上層接口或父類
       ·Composite模式下每個(gè)構(gòu)件都含有三個(gè)基礎(chǔ)方法:add(構(gòu)件)、remove(構(gòu)件)、iterator()
       ·Composite對象含有一個(gè)用來保存其下所有基礎(chǔ)元素的的集合,例如:Vector,ArrayList,HashMap
       ·Composite對象的方法被調(diào)用時(shí)一般都會(huì)引起其下所有基礎(chǔ)元素相同方法的調(diào)用,即遞歸調(diào)用。

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

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


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

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

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级毛片在线免费观看| 免费国产高清视频| 亚洲精品蜜桃久久久久久| 中文字幕精品三区无码亚洲| 伊人久久大香线蕉免费视频| 国产小视频免费观看| 91嫩草亚洲精品| 亚洲免费人成在线视频观看| 人人狠狠综合久久亚洲高清| 国产精品亚洲精品观看不卡| 国产成人久久AV免费| 中文字幕亚洲专区| 国产偷国产偷亚洲高清在线| 中文字幕影片免费在线观看| 亚洲免费精彩视频在线观看| 高清永久免费观看| 亚洲成A人片在线观看中文 | 免费网站观看WWW在线观看| 四虎免费久久影院| 亚洲欧美日韩中文二区| 人与禽交免费网站视频| 婷婷亚洲综合五月天小说| AAAAA级少妇高潮大片免费看| yy6080亚洲一级理论| 亚洲AⅤ男人的天堂在线观看| 18禁止观看免费私人影院| 久久亚洲精品成人av无码网站| 久久免费视频一区| 亚洲女人被黑人巨大进入| 无遮挡呻吟娇喘视频免费播放| 日日AV拍夜夜添久久免费| 亚洲中文字幕无码爆乳app| 青青青国产在线观看免费网站| 久久亚洲AV无码精品色午夜 | 精品国产免费观看久久久 | 美女黄频视频大全免费的| 日韩免费观看的一级毛片| 亚洲精品第一国产综合亚AV| 女人18毛片免费观看| 成人亚洲国产va天堂| 午夜视频在线在免费|