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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第12章組合模式本章教學(xué)內(nèi)容組合模式模式動(dòng)機(jī)與定義模式結(jié)構(gòu)與分析模式實(shí)例與解析模式效果與應(yīng)用模式擴(kuò)展組合模式模式動(dòng)機(jī)組合模式模式動(dòng)機(jī)對(duì)于樹形結(jié)構(gòu),當(dāng)容器對(duì)象(如文件夾)的某一個(gè)方法被調(diào)用時(shí),將遍歷整個(gè)樹形結(jié)構(gòu),尋找也包含這個(gè)方法的成員對(duì)象(可以是容器對(duì)象,也可以是葉子對(duì)象,如子文件夾和文件)并調(diào)用執(zhí)行。(遞歸調(diào)用)由于容器對(duì)象和葉子對(duì)象在功能上的區(qū)別,在使用這些對(duì)象的客戶端代碼中必須有區(qū)別地對(duì)待容器對(duì)象和葉子對(duì)象,而實(shí)際上大多數(shù)情況下客戶端希望一致地處理它們,因?yàn)閷?duì)于這些對(duì)象的區(qū)別對(duì)待將會(huì)使得程序非常復(fù)雜。組合模式模式動(dòng)機(jī)組合模式描述了如何將容器對(duì)象和葉子對(duì)象進(jìn)行遞歸組合,使得用戶在使用時(shí)無(wú)須對(duì)它們進(jìn)行區(qū)分,可以一致地對(duì)待容器對(duì)象和葉子對(duì)象,這就是組合模式的模式動(dòng)機(jī)。組合模式模式定義組合模式(CompositePattern):組合多個(gè)對(duì)象形成樹形結(jié)構(gòu)以表示“整體-部分”的結(jié)構(gòu)層次。組合模式對(duì)單個(gè)對(duì)象(即葉子對(duì)象)和組合對(duì)象(即容器對(duì)象)的使用具有一致性。組合模式又可以稱為“整體-部分”(Part-Whole)模式,屬于對(duì)象的結(jié)構(gòu)模式,它將對(duì)象組織到樹結(jié)構(gòu)中,可以用來(lái)描述整體與部分的關(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è)抽象構(gòu)件類,它既可以代表葉子,又可以代表容器,而客戶端針對(duì)該抽象構(gòu)件類進(jìn)行編程,無(wú)須知道它到底表示的是葉子還是容器,可以對(duì)其進(jìn)行統(tǒng)一處理。同時(shí)容器對(duì)象與抽象構(gòu)件類之間還建立一個(gè)聚合關(guān)聯(lián)關(guān)系,在容器對(duì)象中既可以包含葉子,也可以包含容器,以此實(shí)現(xiàn)遞歸組合,形成一個(gè)樹形結(jié)構(gòu)。組合模式模式分析文件系統(tǒng)組合模式結(jié)構(gòu)圖:組合模式模式分析典型的抽象構(gòu)件角色代碼:publicabstractclassComponent{ publicabstractvoidadd(Componentc); publicabstractvoidremove(Componentc); publicabstractComponentgetChild(inti); publicabstractvoidoperation();}組合模式模式分析典型的葉子構(gòu)件角色代碼:publicclassLeafextendsComponent{ publicvoidadd(Componentc) {//異常處理或錯(cuò)誤提示}

publicvoidremove(Componentc) {//異常處理或錯(cuò)誤提示}

publicComponentgetChild(inti) {//異常處理或錯(cuò)誤提示}

publicvoidoperation() { //實(shí)現(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(); } } }

組合模式組合模式實(shí)例與解析實(shí)例一:水果盤在水果盤(Plate)中有一些水果,如蘋果(Apple)、香蕉(Banana)、梨子(Pear),當(dāng)然大水果盤中還可以有小水果盤,現(xiàn)需要對(duì)盤中的水果進(jìn)行遍歷(吃),當(dāng)然如果對(duì)一個(gè)水果盤執(zhí)行“吃”方法,實(shí)際上就是吃其中的水果。使用組合模式模擬該場(chǎng)景。組合模式組合模式實(shí)例與解析實(shí)例一:水果盤組合模式組合模式實(shí)例與解析實(shí)例一:水果盤參考代碼(Chapter12Composite\sample01)演示……組合模式組合模式實(shí)例與解析實(shí)例二:文件瀏覽文件有不同類型,不同類型的文件其瀏覽方式有所區(qū)別,如文本文件和圖片文件的瀏覽方式就不相同。對(duì)文件夾的瀏覽實(shí)際上就是對(duì)其中所包含文件的瀏覽,而客戶端可以一致地對(duì)文件和文件夾進(jìn)行操作,無(wú)須關(guān)心它們的區(qū)別。使用組合模式來(lái)模擬文件的瀏覽操作。組合模式組合模式實(shí)例與解析實(shí)例二:文件瀏覽組合模式模式優(yōu)缺點(diǎn)組合模式的優(yōu)點(diǎn)可以清楚地定義分層次的復(fù)雜對(duì)象,表示對(duì)象的全部或部分層次,使得增加新構(gòu)件也更容易??蛻舳苏{(diào)用簡(jiǎn)單,客戶端可以一致的使用組合結(jié)構(gòu)或其中單個(gè)對(duì)象。定義了包含葉子對(duì)象和容器對(duì)象的類層次結(jié)構(gòu),葉子對(duì)象可以被組合成更復(fù)雜的容器對(duì)象,而這個(gè)容器對(duì)象又可以被組合,這樣不斷遞歸下去,可以形成復(fù)雜的樹形結(jié)構(gòu)。更容易在組合體內(nèi)加入對(duì)象構(gòu)件,客戶端不必因?yàn)榧尤肓诵碌膶?duì)象構(gòu)件而更改原有代碼。組合模式模式優(yōu)缺點(diǎn)組合模式的缺點(diǎn)使設(shè)計(jì)變得更加抽象,對(duì)象的業(yè)務(wù)規(guī)則如果很復(fù)雜,則實(shí)現(xiàn)組合模式具有很大挑戰(zhàn)性,而且不是所有的方法都與葉子對(duì)象子類都有關(guān)聯(lián)。增加新構(gòu)件時(shí)可能會(huì)產(chǎn)生一些問題,很難對(duì)容器中的構(gòu)件類型進(jìn)行限制。組合模式模式適用環(huán)境在以下情況下可以使用組合模式:需要表示一個(gè)對(duì)象整體或部分層次,在具有整體和部分的層次結(jié)構(gòu)中,希望通過一種方式忽略整體與部分的差異,可以一致地對(duì)待它們。讓客戶能夠忽略不同對(duì)象層次的變化,客戶端可以針對(duì)抽象構(gòu)件編程,無(wú)須關(guān)心對(duì)象層次結(jié)構(gòu)的細(xì)節(jié)。對(duì)象的結(jié)構(gòu)是動(dòng)態(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)是一個(gè)樹形結(jié)構(gòu),因此在對(duì)文件和文件夾進(jìn)行操作時(shí)可以應(yīng)用組合模式,例如殺毒軟件在查毒或殺毒時(shí),既可以針對(duì)一個(gè)具體文件,也可以針對(duì)一個(gè)目錄。如果是對(duì)目錄查毒或殺毒,將遞歸處理目錄中的每一個(gè)子目錄和文件。

本章小結(jié)組合模式用于組合多個(gè)對(duì)象形成樹形結(jié)構(gòu)以表示“整體-部分”的結(jié)構(gòu)層次。組合模式對(duì)單個(gè)對(duì)象(即葉子對(duì)象)和組合對(duì)象(即容器對(duì)象)的使用具有一致性。組合模式又可以稱為“整體-部分”模式,屬于對(duì)象的結(jié)構(gòu)模式,它將對(duì)象組織到樹結(jié)構(gòu)中,可以用來(lái)描述整體與部分的關(guān)系。組合模式包含三個(gè)角色:抽象構(gòu)件為葉子構(gòu)件和容器構(gòu)件對(duì)象聲明接口,在該角色中可以包含所有子類共有行為的聲明和實(shí)現(xiàn);葉子構(gòu)件在組合結(jié)構(gòu)中表示葉子節(jié)點(diǎn)對(duì)象,葉子節(jié)點(diǎn)沒有子節(jié)點(diǎn);容器構(gòu)件在組合結(jié)構(gòu)中表示容器節(jié)點(diǎn)對(duì)象,容器節(jié)點(diǎn)包含子節(jié)點(diǎn),其子節(jié)點(diǎn)可以是葉子節(jié)點(diǎn),也可以是容器節(jié)點(diǎn),它提供一個(gè)集合用于存儲(chǔ)子節(jié)點(diǎn),實(shí)現(xiàn)了在抽象構(gòu)件中定義的行為。組合模式的關(guān)鍵是定義了一個(gè)抽象構(gòu)件類,它既可以代表葉子,又可以代表容器,而客戶端針對(duì)該抽象構(gòu)件類進(jìn)行編程,無(wú)須知道它到底表示的是葉子還是容器,可以對(duì)其進(jìn)行統(tǒng)一處理。本章小結(jié)組合模式的主要優(yōu)點(diǎn)在于可以方便地對(duì)層次結(jié)構(gòu)進(jìn)行控制,客戶端調(diào)用簡(jiǎn)單,客戶端可以一致的使用組合結(jié)構(gòu)或其中單個(gè)對(duì)象,用戶就不必關(guān)心自己處理的是單個(gè)對(duì)象還是整個(gè)組合結(jié)構(gòu),簡(jiǎn)化了客戶端代碼;其缺點(diǎn)在于

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論