版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
大綱
組合模式概述
組合模式的結(jié)構(gòu)與實(shí)現(xiàn)
組合模式的應(yīng)用實(shí)例
透明組合模式與安全組合模式
組合模式的優(yōu)缺點(diǎn)與適用環(huán)境組合模式概述
Windows操作系統(tǒng)目錄結(jié)構(gòu)我的資料圖像文件文本文件小龍女.jpg張無忌.gif九陰真經(jīng).txt葵花寶典.doc增加新的容器構(gòu)件和葉子構(gòu)件都很方便,符象的全部或部分層次,讓客戶端忽略了層次抽象構(gòu)件Component中沒有聲明任何用于管理成員對(duì)將對(duì)象組織到樹形結(jié)構(gòu)中,可以用來描+operation()operation();positionsofobjectsuniformly.體關(guān)系的層次結(jié)構(gòu)統(tǒng)一。+getChild(inti)TextComponent-component:Component[]+add(Componentc)publicabstractvoidremove(Componentc);//刪除成員publicabstractvoidoperation();//業(yè)務(wù)方法客戶端可以一致地使用一個(gè)組合結(jié)構(gòu)或其中組合模式概述
分析
在樹形目錄結(jié)構(gòu)中,包含文件和文件夾兩類不同的元素?在文件夾中可以包含文件,還可以繼續(xù)包含子文件夾?在文件中不能再包含子文件或者子文件夾
文件夾容器(Container)
文件葉子(Leaf)組合模式概述
分析
當(dāng)容器對(duì)象的某一個(gè)方法被調(diào)用時(shí),將遍歷整個(gè)樹形結(jié)構(gòu),尋找也包含這個(gè)方法的成員對(duì)象并調(diào)用執(zhí)行,if(is容器對(duì)象){牽一而動(dòng)百,其中//處理容器對(duì)象使用了遞歸調(diào)用的機(jī)制來對(duì)整個(gè)結(jié)構(gòu)進(jìn)行處理elseif(is葉子對(duì)象){}
由于容器對(duì)象和葉子對(duì)象在功能上的區(qū)別,//處理葉子對(duì)象在使用這些對(duì)象的代碼中必須有區(qū)別地對(duì)待容器對(duì)象和葉子對(duì)}象,而實(shí)際上大多數(shù)情況下客戶端希望一致地處理它們,因?yàn)閷?duì)于這些對(duì)象的區(qū)別對(duì)待將會(huì)使程序非常復(fù)雜組合模式概述
如何一致地對(duì)待容器對(duì)象和葉子對(duì)象?組合模式組合模式通過一種巧妙的設(shè)計(jì)方案使得用戶可以一致性地處理整個(gè)樹形結(jié)構(gòu)或者樹形結(jié)構(gòu)的一部分,它描述了如何將容器對(duì)象和葉子對(duì)象進(jìn)行遞歸組合,使得用戶在使用時(shí)無須對(duì)它們進(jìn)行區(qū)分,可以一致地對(duì)待容器對(duì)象和葉子對(duì)象。組合模式概述
組合模式定義組合模式:樹形結(jié)構(gòu)組合多個(gè)對(duì)象形成具有部分以表示-整體關(guān)系的層次結(jié)構(gòu)統(tǒng)一。組合模式讓客戶端可以象和組合對(duì)象。對(duì)待單個(gè)對(duì)CompositePattern:Cotreestructurestorepresentpart-wholehierarchies.Compositeletsclientstreatpositionsofobjectsuniformly.
對(duì)象結(jié)構(gòu)型模式組合模式概述
組合模式定義
又稱為“部分-整體”(Part-Whole)模式
將對(duì)象組織到樹形結(jié)構(gòu)中,可以用來描述整體與部分的關(guān)系組合模式的結(jié)構(gòu)與實(shí)現(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)與實(shí)現(xiàn)
組合模式的結(jié)構(gòu)
組合模式包含以下3個(gè)角色:?Component(抽象構(gòu)件)?Leaf(葉子構(gòu)件)?Composite(容器構(gòu)件)組合模式的結(jié)構(gòu)與實(shí)現(xiàn)
組合模式的實(shí)現(xiàn)
抽象構(gòu)件角色典型代碼:publicabstractclassComponent{publicabstractvoidadd(Componentc);//增加成員publicabstractvoidremove(Componentc);//刪除成員publicabstractComponentgetChild(inti);//獲取成員publicabstractvoidoperation();//業(yè)務(wù)方法}publicclassLeafextendsComponent{組合模式的結(jié)構(gòu)與實(shí)現(xiàn)publicvoidadd(Componentc){//異常處理或錯(cuò)誤提示}
組合模式的實(shí)現(xiàn)publicvoidremove(Componentc){
//葉子構(gòu)件異常處理或錯(cuò)誤提示角色典型代碼:}publicComponentgetChild(inti){//異常處理或錯(cuò)誤提示returnnull;}publicvoidoperation(){//葉子構(gòu)件具體業(yè)務(wù)方法的實(shí)現(xiàn)}}publicclassCompositeextendsComponent{privateArrayList<Component>list=newArrayList<Component>();publicvoidadd(Componentc){組合模式的結(jié)構(gòu)與實(shí)現(xiàn)list.add(c);
組合模式的實(shí)現(xiàn)}publicvoidremove(Componentc){
容器構(gòu)件角色典型代碼:list.remove(c);}publicComponentgetChild(inti){return(Component)list.get(i);}publicvoidoperation(){//容器構(gòu)件具體業(yè)務(wù)方法的實(shí)現(xiàn),將遞歸調(diào)用成員構(gòu)件的業(yè)務(wù)方法for(Objectobj:list){((Component)obj).operation();}}}組合模式的應(yīng)用實(shí)例
實(shí)例說明某軟件公司欲開發(fā)一個(gè)殺毒(Antivirus)軟件,該軟件既可以對(duì)某個(gè)文件夾(Folder)殺毒,也可以對(duì)某個(gè)指定的文件(File)進(jìn)行殺毒。該殺毒軟件還可以根據(jù)各類文件的特點(diǎn),為不同類型的文件提供不同的殺毒方式,例如圖像文件(ImageFile)和文本文件(TextFile)的殺毒方式就有所差異。現(xiàn)使用組合模式來設(shè)計(jì)該殺毒軟件的整體框架。組合模式的應(yīng)用實(shí)例AbstractFile{abstract}
實(shí)例類圖+++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殺毒軟件框架設(shè)計(jì)結(jié)構(gòu)圖組合模式的應(yīng)用實(shí)例
實(shí)例代碼
(1)AbstractFile:抽象文件類,充當(dāng)抽象構(gòu)件類
(2)ImageFile:圖像文件類,充當(dāng)葉子構(gòu)件類
(3)TextFile:文本文件類,充當(dāng)葉子構(gòu)件類
(4)VideoFile:視頻文件類,充當(dāng)葉子構(gòu)件類
(5)Folder:文件夾類,充當(dāng)容器構(gòu)件類
(6)Client:客戶端測試類演示……Code(posite)組合模式的應(yīng)用實(shí)例
結(jié)果及分析
如果需要更換操作節(jié)點(diǎn),例如只對(duì)文件夾“文本文件”進(jìn)行殺毒,客戶端代碼只需修改一行即可,例如將代碼:folder1.killVirus();
改為:folder3.killVirus();
在具體實(shí)現(xiàn)時(shí),可以創(chuàng)建圖形化界面讓用戶來選擇所需操作的根節(jié)點(diǎn),無須修改源代碼,符合開閉原則透明組合模式與安全組合模式
透明組合模式Component
抽象構(gòu)件Component+operation()中聲明了所有用于管理成員對(duì)象的方法,包括+add()add(Componentc)、remove(),以及getChild()等+remove(Componentc)+getChild(inti)方法
在客戶端看來,葉子對(duì)象與容器對(duì)象所提供的方法是一致的,客戶端可以一致地對(duì)待所有的對(duì)象LeafComposite
缺點(diǎn)是不夠安全,因?yàn)槿~子對(duì)象和容器對(duì)象在本質(zhì)上children+是有區(qū)別的operation()+add(Componentc)+remove(Componentc)+getChild(inti)+operation()+add(Componentc)+remove(Componentc)+getChild(inti)透明組合模式與安全組合模式
安全組合模式Component
抽象構(gòu)件Component中沒有聲明任何用于管理成員對(duì)象的方法,而是在+operation()Composite類中聲明并實(shí)現(xiàn)這些方法
對(duì)于葉子對(duì)象,客戶端不可能調(diào)用到這些方法
缺點(diǎn)是不夠透明,客戶端不能完全針對(duì)抽象編程,必須有區(qū)別地對(duì)待葉子構(gòu)件和容器構(gòu)件CompositeLeafchildren+operation()+add(Componentc)+remove(Componentc)+getChild(inti)+operation()組合模式實(shí)例
JavaAWT中的組件樹ComponentCheckboxButtonTextComponentContainercomponent-component:Component[]組合模式的優(yōu)缺點(diǎn)與適用環(huán)境
模式優(yōu)點(diǎn)
可以清楚地定義分層次的復(fù)雜對(duì)象,表示對(duì)象的全部或部分層次,讓客戶端忽略了層次的差異,方便對(duì)整個(gè)層次結(jié)構(gòu)進(jìn)行控制
客戶端可以一致地使用一個(gè)組合結(jié)構(gòu)或其中單個(gè)對(duì)象,不必關(guān)心處理的是單個(gè)對(duì)象還是整個(gè)組合結(jié)構(gòu),簡化了客戶端代碼
增加新的容器構(gòu)件和葉子構(gòu)件都很方便,符合開閉原則
為樹形結(jié)構(gòu)的面向?qū)ο髮?shí)現(xiàn)提供了一種靈活的解決方案組合模式的優(yōu)缺點(diǎn)與適用環(huán)境
模式缺點(diǎn)
在增加新構(gòu)件時(shí)很難對(duì)容器中的構(gòu)件類型進(jìn)行限制組合模式的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江陰市二手房買賣合同風(fēng)險(xiǎn)防范
- 植物園建造師聘用合同樣本
- 國際學(xué)校校車租賃合同樣式
- 高端住宅交易合同模板杭州
- 機(jī)械工程學(xué)院教務(wù)主任聘用合同
- 金融創(chuàng)業(yè)公司辦公區(qū)門窗翻新合同
- 瑜伽館網(wǎng)架施工合同
- 大型醫(yī)院附近加油站安裝工程合同
- 地鐵隧道入口外側(cè)保溫施工協(xié)議
- 建筑工程單位聘用合同樣本
- GMP質(zhì)量管理體系文件 中藥材干燥記錄
- 2023年AMC8競賽真題英文版及答案
- GB/T 6974.5-2008起重機(jī)術(shù)語第5部分:橋式和門式起重機(jī)
- GB/T 2820.5-2009往復(fù)式內(nèi)燃機(jī)驅(qū)動(dòng)的交流發(fā)電機(jī)組第5部分:發(fā)電機(jī)組
- “無廢城市”建設(shè)宣傳工作方案
- 國際商務(wù)函電課后答案第二版李爽
- 公路橋梁變更工程測量專項(xiàng)施工方案
- 國際貿(mào)易風(fēng)險(xiǎn)管理 課件
- 鼻咽癌 講義課件
- 《無機(jī)化學(xué)》第七章分子結(jié)構(gòu)和晶體結(jié)構(gòu)
- 醫(yī)療耗材配送服務(wù)方案
評(píng)論
0/150
提交評(píng)論