Java設計模式課件-組合模式_第1頁
Java設計模式課件-組合模式_第2頁
Java設計模式課件-組合模式_第3頁
Java設計模式課件-組合模式_第4頁
Java設計模式課件-組合模式_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

大綱

組合模式概述

組合模式的結(jié)構(gòu)與實現(xiàn)

組合模式的應用實例

透明組合模式與安全組合模式

組合模式的優(yōu)缺點與適用環(huán)境組合模式概述

Windows操作系統(tǒng)目錄結(jié)構(gòu)我的資料圖像文件文本文件小龍女.jpg張無忌.gif九陰真經(jīng).txt葵花寶典.doc增加新的容器構(gòu)件和葉子構(gòu)件都很方便,符象的全部或部分層次,讓客戶端忽略了層次抽象構(gòu)件Component中沒有聲明任何用于管理成員對將對象組織到樹形結(jié)構(gòu)中,可以用來描+operation()operation();positionsofobjectsuniformly.體關系的層次結(jié)構(gòu)統(tǒng)一。+getChild(inti)TextComponent-component:Component[]+add(Componentc)publicabstractvoidremove(Componentc);//刪除成員publicabstractvoidoperation();//業(yè)務方法客戶端可以一致地使用一個組合結(jié)構(gòu)或其中組合模式概述

分析

在樹形目錄結(jié)構(gòu)中,包含文件和文件夾兩類不同的元素?在文件夾中可以包含文件,還可以繼續(xù)包含子文件夾?在文件中不能再包含子文件或者子文件夾

文件夾容器(Container)

文件葉子(Leaf)組合模式概述

分析

當容器對象的某一個方法被調(diào)用時,將遍歷整個樹形結(jié)構(gòu),尋找也包含這個方法的成員對象并調(diào)用執(zhí)行,if(is容器對象){牽一而動百,其中//處理容器對象使用了遞歸調(diào)用的機制來對整個結(jié)構(gòu)進行處理elseif(is葉子對象){}

由于容器對象和葉子對象在功能上的區(qū)別,//處理葉子對象在使用這些對象的代碼中必須有區(qū)別地對待容器對象和葉子對}象,而實際上大多數(shù)情況下客戶端希望一致地處理它們,因為對于這些對象的區(qū)別對待將會使程序非常復雜組合模式概述

如何一致地對待容器對象和葉子對象?組合模式組合模式通過一種巧妙的設計方案使得用戶可以一致性地處理整個樹形結(jié)構(gòu)或者樹形結(jié)構(gòu)的一部分,它描述了如何將容器對象和葉子對象進行遞歸組合,使得用戶在使用時無須對它們進行區(qū)分,可以一致地對待容器對象和葉子對象。組合模式概述

組合模式定義組合模式:樹形結(jié)構(gòu)組合多個對象形成具有部分以表示-整體關系的層次結(jié)構(gòu)統(tǒng)一。組合模式讓客戶端可以象和組合對象。對待單個對CompositePattern:Cotreestructurestorepresentpart-wholehierarchies.Compositeletsclientstreatpositionsofobjectsuniformly.

對象結(jié)構(gòu)型模式組合模式概述

組合模式定義

又稱為“部分-整體”(Part-Whole)模式

將對象組織到樹形結(jié)構(gòu)中,可以用來描述整體與部分的關系組合模式的結(jié)構(gòu)與實現(xiàn)

組合模式的結(jié)構(gòu)ComponentClient+operation()+add(Componentc)+remove(Componentc)+getChild(inti)LeafComposite+operation()+operation()+add(Componentc)+remove(Componentc)+getChild(inti)childrenfor(Componentchild:children){child.operation();}組合模式的結(jié)構(gòu)與實現(xiàn)

組合模式的結(jié)構(gòu)

組合模式包含以下3個角色:?Component(抽象構(gòu)件)?Leaf(葉子構(gòu)件)?Composite(容器構(gòu)件)組合模式的結(jié)構(gòu)與實現(xiàn)

組合模式的實現(xiàn)

抽象構(gòu)件角色典型代碼:publicabstractclassComponent{publicabstractvoidadd(Componentc);//增加成員publicabstractvoidremove(Componentc);//刪除成員publicabstractComponentgetChild(inti);//獲取成員publicabstractvoidoperation();//業(yè)務方法}publicclassLeafextendsComponent{組合模式的結(jié)構(gòu)與實現(xiàn)publicvoidadd(Componentc){//異常處理或錯誤提示}

組合模式的實現(xiàn)publicvoidremove(Componentc){

//葉子構(gòu)件異常處理或錯誤提示角色典型代碼:}publicComponentgetChild(inti){//異常處理或錯誤提示returnnull;}publicvoidoperation(){//葉子構(gòu)件具體業(yè)務方法的實現(xiàn)}}publicclassCompositeextendsComponent{privateArrayList<Component>list=newArrayList<Component>();publicvoidadd(Componentc){組合模式的結(jié)構(gòu)與實現(xiàn)list.add(c);

組合模式的實現(xiàn)}publicvoidremove(Componentc){

容器構(gòu)件角色典型代碼:list.remove(c);}publicComponentgetChild(inti){return(Component)list.get(i);}publicvoidoperation(){//容器構(gòu)件具體業(yè)務方法的實現(xiàn),將遞歸調(diào)用成員構(gòu)件的業(yè)務方法for(Objectobj:list){((Component)obj).operation();}}}組合模式的應用實例

實例說明某軟件公司欲開發(fā)一個殺毒(Antivirus)軟件,該軟件既可以對某個文件夾(Folder)殺毒,也可以對某個指定的文件(File)進行殺毒。該殺毒軟件還可以根據(jù)各類文件的特點,為不同類型的文件提供不同的殺毒方式,例如圖像文件(ImageFile)和文本文件(TextFile)的殺毒方式就有所差異。現(xiàn)使用組合模式來設計該殺毒軟件的整體框架。組合模式的應用實例AbstractFile{abstract}

實例類圖+++remove(AbstractFilefile)add(AbstractFilefile)getChild(inti):void:void:AbstractFile+killVirus():voidfileListImageFileVideoFileFolder-name:String++ImageFile(S)add(AbstractFilefile)++getChild(inti)remove(AbstractFilefile):void:AbstractFile+killVirus()-name:String++VideoFile(S)add(AbstractFilefile)++remove(AbstractFilefile)getChild(inti):AbstractFile:void+killVirus()--fileListname:ArrayList:String+Folder(S)++remove(AbstractFilefile)add(AbstractFilefile):void:void++getChild(inti)killVirus():void:void:void:void:AbstractFile:voidTextFile-name:String++add(AbstractFilefile)TextFile(S)++remove(AbstractFilefile)getChild(inti):void:AbstractFile+killVirus():void:void殺毒軟件框架設計結(jié)構(gòu)圖組合模式的應用實例

實例代碼

(1)AbstractFile:抽象文件類,充當抽象構(gòu)件類

(2)ImageFile:圖像文件類,充當葉子構(gòu)件類

(3)TextFile:文本文件類,充當葉子構(gòu)件類

(4)VideoFile:視頻文件類,充當葉子構(gòu)件類

(5)Folder:文件夾類,充當容器構(gòu)件類

(6)Client:客戶端測試類演示……Code(posite)組合模式的應用實例

結(jié)果及分析

如果需要更換操作節(jié)點,例如只對文件夾“文本文件”進行殺毒,客戶端代碼只需修改一行即可,例如將代碼:folder1.killVirus();

改為:folder3.killVirus();

在具體實現(xiàn)時,可以創(chuàng)建圖形化界面讓用戶來選擇所需操作的根節(jié)點,無須修改源代碼,符合開閉原則透明組合模式與安全組合模式

透明組合模式Component

抽象構(gòu)件Component+operation()中聲明了所有用于管理成員對象的方法,包括+add()add(Componentc)、remove(),以及getChild()等+remove(Componentc)+getChild(inti)方法

在客戶端看來,葉子對象與容器對象所提供的方法是一致的,客戶端可以一致地對待所有的對象LeafComposite

缺點是不夠安全,因為葉子對象和容器對象在本質(zhì)上children+是有區(qū)別的operation()+add(Componentc)+remove(Componentc)+getChild(inti)+operation()+add(Componentc)+remove(Componentc)+getChild(inti)透明組合模式與安全組合模式

安全組合模式Component

抽象構(gòu)件Component中沒有聲明任何用于管理成員對象的方法,而是在+operation()Composite類中聲明并實現(xiàn)這些方法

對于葉子對象,客戶端不可能調(diào)用到這些方法

缺點是不夠透明,客戶端不能完全針對抽象編程,必須有區(qū)別地對待葉子構(gòu)件和容器構(gòu)件CompositeLeafchildren+operation()+add(Componentc)+remove(Componentc)+getChild(inti)+operation()組合模式實例

JavaAWT中的組件樹ComponentCheckboxButtonTextComponentContainercomponent-component:Component[]組合模式的優(yōu)缺點與適用環(huán)境

模式優(yōu)點

可以清楚地定義分層次的復雜對象,表示對象的全部或部分層次,讓客戶端忽略了層次的差異,方便對整個層次結(jié)構(gòu)進行控制

客戶端可以一致地使用一個組合結(jié)構(gòu)或其中單個對象,不必關心處理的是單個對象還是整個組合結(jié)構(gòu),簡化了客戶端代碼

增加新的容器構(gòu)件和葉子構(gòu)件都很方便,符合開閉原則

為樹形結(jié)構(gòu)的面向?qū)ο髮崿F(xiàn)提供了一種靈活的解決方案組合模式的優(yōu)缺點與適用環(huán)境

模式缺點

在增加新構(gòu)件時很難對容器中的構(gòu)件類型進行限制組合模式的

溫馨提示

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

評論

0/150

提交評論