第12章-組合模式_第1頁
第12章-組合模式_第2頁
第12章-組合模式_第3頁
第12章-組合模式_第4頁
第12章-組合模式_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論