版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第12章組合模式本章教學(xué)內(nèi)容組合模式模式動機(jī)與定義模式結(jié)構(gòu)與分析模式實例與解析模式效果與應(yīng)用模式擴(kuò)展組合模式模式動機(jī)組合模式模式動機(jī)對于樹形結(jié)構(gòu),當(dāng)容器對象(如文件夾)的某一個方法被調(diào)用時,將遍歷整個樹形結(jié)構(gòu),尋找也包含這個方法的成員對象(可以是容器對象,也可以是葉子對象,如子文件夾和文件)并調(diào)用執(zhí)行。(遞歸調(diào)用)由于容器對象和葉子對象在功能上的區(qū)別,在使用這些對象的客戶端代碼中必須有區(qū)別地對待容器對象和葉子對象,而實際上大多數(shù)情況下客戶端希望一致地處理它們,因為對于這些對象的區(qū)別對待將會使得程序非常復(fù)雜。組合模式模式動機(jī)組合模式描述了如何將容器對象和葉子對象進(jìn)行遞歸組合,使得用戶在使用時無須對它們進(jìn)行區(qū)分,可以一致地對待容器對象和葉子對象,這就是組合模式的模式動機(jī)。組合模式模式定義組合模式(CompositePattern):組合多個對象形成樹形結(jié)構(gòu)以表示“整體-部分”的結(jié)構(gòu)層次。組合模式對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性。組合模式又可以稱為“整體-部分”(Part-Whole)模式,屬于對象的結(jié)構(gòu)模式,它將對象組織到樹結(jié)構(gòu)中,可以用來描述整體與部分的關(guān)系。組合模式模式定義CompositePattern:Composeobjectsintotreestructurestorepresentpart-wholehierarchies.Compositeletsclientstreatindividualobjectsandcompositionsofobjectsuniformly.Frequencyofuse:mediumhigh
組合模式模式結(jié)構(gòu)組合模式模式結(jié)構(gòu)組合模式包含如下角色:Component:抽象構(gòu)件Leaf:葉子構(gòu)件Composite:容器構(gòu)件Client:客戶類組合模式模式分析組合模式的關(guān)鍵是定義了一個抽象構(gòu)件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構(gòu)件類進(jìn)行編程,無須知道它到底表示的是葉子還是容器,可以對其進(jìn)行統(tǒng)一處理。同時容器對象與抽象構(gòu)件類之間還建立一個聚合關(guān)聯(lián)關(guān)系,在容器對象中既可以包含葉子,也可以包含容器,以此實現(xiàn)遞歸組合,形成一個樹形結(jié)構(gòu)。組合模式模式分析文件系統(tǒng)組合模式結(jié)構(gòu)圖:組合模式模式分析典型的抽象構(gòu)件角色代碼:publicabstractclassComponent{ publicabstractvoidadd(Componentc); publicabstractvoidremove(Componentc); publicabstractComponentgetChild(inti); publicabstractvoidoperation();}組合模式模式分析典型的葉子構(gòu)件角色代碼:publicclassLeafextendsComponent{ publicvoidadd(Componentc) {//異常處理或錯誤提示}
publicvoidremove(Componentc) {//異常處理或錯誤提示}
publicComponentgetChild(inti) {//異常處理或錯誤提示}
publicvoidoperation() { //實現(xiàn)代碼
}}
組合模式模式分析典型的容器構(gòu)件角色代碼:publicclassCompositeextendsComponent{ privateArrayListlist=newArrayList();
publicvoidadd(Componentc) { list.add(c); }
publicvoidremove(Componentc) { list.remove(c); }
publicComponentgetChild(inti) { (Component)list.get(i); }
publicvoidoperation() { for(Objectobj:list) { ((Component)obj).operation(); } } }
組合模式組合模式實例與解析實例一:水果盤在水果盤(Plate)中有一些水果,如蘋果(Apple)、香蕉(Banana)、梨子(Pear),當(dāng)然大水果盤中還可以有小水果盤,現(xiàn)需要對盤中的水果進(jìn)行遍歷(吃),當(dāng)然如果對一個水果盤執(zhí)行“吃”方法,實際上就是吃其中的水果。使用組合模式模擬該場景。組合模式組合模式實例與解析實例一:水果盤組合模式組合模式實例與解析實例一:水果盤參考代碼(Chapter12Composite\sample01)演示……組合模式組合模式實例與解析實例二:文件瀏覽文件有不同類型,不同類型的文件其瀏覽方式有所區(qū)別,如文本文件和圖片文件的瀏覽方式就不相同。對文件夾的瀏覽實際上就是對其中所包含文件的瀏覽,而客戶端可以一致地對文件和文件夾進(jìn)行操作,無須關(guān)心它們的區(qū)別。使用組合模式來模擬文件的瀏覽操作。組合模式組合模式實例與解析實例二:文件瀏覽組合模式模式優(yōu)缺點組合模式的優(yōu)點可以清楚地定義分層次的復(fù)雜對象,表示對象的全部或部分層次,使得增加新構(gòu)件也更容易??蛻舳苏{(diào)用簡單,客戶端可以一致的使用組合結(jié)構(gòu)或其中單個對象。定義了包含葉子對象和容器對象的類層次結(jié)構(gòu),葉子對象可以被組合成更復(fù)雜的容器對象,而這個容器對象又可以被組合,這樣不斷遞歸下去,可以形成復(fù)雜的樹形結(jié)構(gòu)。更容易在組合體內(nèi)加入對象構(gòu)件,客戶端不必因為加入了新的對象構(gòu)件而更改原有代碼。組合模式模式優(yōu)缺點組合模式的缺點使設(shè)計變得更加抽象,對象的業(yè)務(wù)規(guī)則如果很復(fù)雜,則實現(xiàn)組合模式具有很大挑戰(zhàn)性,而且不是所有的方法都與葉子對象子類都有關(guān)聯(lián)。增加新構(gòu)件時可能會產(chǎn)生一些問題,很難對容器中的構(gòu)件類型進(jìn)行限制。組合模式模式適用環(huán)境在以下情況下可以使用組合模式:需要表示一個對象整體或部分層次,在具有整體和部分的層次結(jié)構(gòu)中,希望通過一種方式忽略整體與部分的差異,可以一致地對待它們。讓客戶能夠忽略不同對象層次的變化,客戶端可以針對抽象構(gòu)件編程,無須關(guān)心對象層次結(jié)構(gòu)的細(xì)節(jié)。對象的結(jié)構(gòu)是動態(tài)的并且復(fù)雜程度不一樣,但客戶需要一致地處理它們。組合模式模式應(yīng)用(1)XML文檔解析<?xmlversion="1.0"?><books><book><author>Carson</author><priceformat="dollar">31.95</price><pubdate>05/01/2001</pubdate></book><pubinfo><publisher>MSPress</publisher><state>WA</state></pubinfo></books>組合模式模式應(yīng)用(2)操作系統(tǒng)中的目錄結(jié)構(gòu)是一個樹形結(jié)構(gòu),因此在對文件和文件夾進(jìn)行操作時可以應(yīng)用組合模式,例如殺毒軟件在查毒或殺毒時,既可以針對一個具體文件,也可以針對一個目錄。如果是對目錄查毒或殺毒,將遞歸處理目錄中的每一個子目錄和文件。
本章小結(jié)組合模式用于組合多個對象形成樹形結(jié)構(gòu)以表示“整體-部分”的結(jié)構(gòu)層次。組合模式對單個對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性。組合模式又可以稱為“整體-部分”模式,屬于對象的結(jié)構(gòu)模式,它將對象組織到樹結(jié)構(gòu)中,可以用來描述整體與部分的關(guān)系。組合模式包含三個角色:抽象構(gòu)件為葉子構(gòu)件和容器構(gòu)件對象聲明接口,在該角色中可以包含所有子類共有行為的聲明和實現(xiàn);葉子構(gòu)件在組合結(jié)構(gòu)中表示葉子節(jié)點對象,葉子節(jié)點沒有子節(jié)點;容器構(gòu)件在組合結(jié)構(gòu)中表示容器節(jié)點對象,容器節(jié)點包含子節(jié)點,其子節(jié)點可以是葉子節(jié)點,也可以是容器節(jié)點,它提供一個集合用于存儲子節(jié)點,實現(xiàn)了在抽象構(gòu)件中定義的行為。組合模式的關(guān)鍵是定義了一個抽象構(gòu)件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構(gòu)件類進(jìn)行編程,無須知道它到底表示的是葉子還是容器,可以對其進(jìn)行統(tǒng)一處理。本章小結(jié)組合模式的主要優(yōu)點在于可以方便地對層次結(jié)構(gòu)進(jìn)行控制,客戶端調(diào)用簡單,客戶端可以一致的使用組合結(jié)構(gòu)或其中單個對象,用戶就不必關(guān)心自己處理的是單個對象還是整個組合結(jié)構(gòu),簡化了客戶端代碼;其缺點在于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物標(biāo)志物在藥物臨床試驗中的臨床前沿進(jìn)展
- 生物標(biāo)志物在臨床試驗中的盲法設(shè)計考量
- 生物墨水中的免疫調(diào)節(jié)因子遞送策略
- 生物制品穩(wěn)定性試驗環(huán)境監(jiān)測要求
- 生活質(zhì)量評價在慢性病藥物精準(zhǔn)醫(yī)療中的定位
- 培訓(xùn)課程效果考試題庫
- 深度解析(2026)《GBT 20013.4-2010核醫(yī)學(xué)儀器 例行試驗 第4部分:放射性核素校準(zhǔn)儀》(2026年)深度解析
- 生殖毒性試驗的風(fēng)險分級與防控
- 瓣膜介入術(shù)后抗凝治療策略優(yōu)化
- 環(huán)境農(nóng)藥暴露與代謝綜合征的營養(yǎng)策略
- 農(nóng)機(jī)安全操作培訓(xùn)課件
- 醫(yī)患溝通與人文關(guān)懷
- Unit 1 Teenage Life 學(xué)習(xí)成果展示 檢測(含答案)高中英語人教版必修第一冊
- 2024北師大版八年級數(shù)學(xué)上冊 第一章思想方法:勾股定理中的三種主要數(shù)學(xué)思想(含答案)
- 2024年北京戲曲藝術(shù)職業(yè)學(xué)院單招《語文》試題及完整答案詳解【各地真題】
- 【25年秋】【第16周】《逐科技之光筑愛國之夢》主題班會【課件】
- 《濕法冶金-浸出技術(shù)》課件-第 7 章 金和銀的浸出
- 學(xué)生在線學(xué)習(xí)中的動機(jī)激勵研究
- 鐵路局招聘考試《鐵路基礎(chǔ)知識》100題及答案
- 幼兒園后勤比武活動方案
- ehs費用管理制度
評論
0/150
提交評論