版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
DesignPatterns組合模式劉偉(Sunny)weiliu_china@126.com大綱組合模式概述組合模式的結(jié)構(gòu)與實(shí)現(xiàn)組合模式的應(yīng)用實(shí)例透明組合模式與安全組合模式組合模式的優(yōu)缺點(diǎn)與適用環(huán)境組合模式概述Windows操作系統(tǒng)目錄結(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í)行,牽一而動(dòng)百,其中使用了遞歸調(diào)用的機(jī)制來對(duì)整個(gè)結(jié)構(gòu)進(jìn)行處理由于容器對(duì)象和葉子對(duì)象在功能上的區(qū)別,在使用這些對(duì)象的代碼中必須有區(qū)別地對(duì)待容器對(duì)象和葉子對(duì)象,而實(shí)際上大多數(shù)情況下客戶端希望一致地處理它們,因?yàn)閷?duì)于這些對(duì)象的區(qū)別對(duì)待將會(huì)使程序非常復(fù)雜if(is容器對(duì)象){//處理容器對(duì)象}elseif(is葉子對(duì)象){//處理葉子對(duì)象}組合模式概述如何一致地對(duì)待容器對(duì)象和葉子對(duì)象?組合模式組合模式通過一種巧妙的設(shè)計(jì)方案使得用戶可以一致性地處理整個(gè)樹形結(jié)構(gòu)或者樹形結(jié)構(gòu)的一部分,它描述了如何將容器對(duì)象和葉子對(duì)象進(jìn)行遞歸組合,使得用戶在使用時(shí)無須對(duì)它們進(jìn)行區(qū)分,可以一致地對(duì)待容器對(duì)象和葉子對(duì)象。組合模式概述組合模式定義對(duì)象結(jié)構(gòu)型模式組合模式:組合多個(gè)對(duì)象形成樹形結(jié)構(gòu)以表示具有部分-整體關(guān)系的層次結(jié)構(gòu)。組合模式讓客戶端可以統(tǒng)一對(duì)待單個(gè)對(duì)象和組合對(duì)象。CompositePattern:Composeobjectsintotreestructurestorepresentpart-wholehierarchies.Compositeletsclientstreatindividualobjectsandcompositionsofobjectsuniformly.組合模式概述組合模式定義又稱為“部分-整體”(Part-Whole)模式將對(duì)象組織到樹形結(jié)構(gòu)中,可以用來描述整體與部分的關(guān)系組合模式的結(jié)構(gòu)與實(shí)現(xiàn)組合模式的結(jié)構(gòu)組合模式的結(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)件角色典型代碼:abstractclassComponent{ publicabstractvoidAdd(Componentc);//增加成員 publicabstractvoidRemove(Componentc);//刪除成員 publicabstractComponentGetChild(inti);//獲取成員 publicabstractvoidOperation();//業(yè)務(wù)方法}組合模式的結(jié)構(gòu)與實(shí)現(xiàn)組合模式的實(shí)現(xiàn)葉子構(gòu)件角色典型代碼:classLeaf:Component{ publicoverridevoidAdd(Componentc){ //異常處理或錯(cuò)誤提示
}
publicoverridevoidRemove(Componentc){ //異常處理或錯(cuò)誤提示
}
publicoverrideComponentGetChild(inti){ //異常處理或錯(cuò)誤提示
returnnull; }
publicoverridevoidOperation(){ //葉子構(gòu)件具體業(yè)務(wù)方法的實(shí)現(xiàn) }}組合模式的結(jié)構(gòu)與實(shí)現(xiàn)組合模式的實(shí)現(xiàn)容器構(gòu)件角色典型代碼:usingSystem;usingSystem.Collections.Generic;classComposite:Component{ privateList<Component>list=newList<Component>();
publicoverridevoidAdd(Componentc){ list.Add(c); }
publicoverridevoidRemove(Componentc){ list.Remove(c); }
publicoverrideComponentGetChild(inti){ return(Component)list[i]; }
publicoverridevoidOperation(){
//容器構(gòu)件具體業(yè)務(wù)方法的實(shí)現(xiàn),將遞歸調(diào)用成員構(gòu)件的業(yè)務(wù)方法
foreach(Objectobjinlist){ ((Component)obj).Operation(); } } }組合模式的應(yīng)用實(shí)例實(shí)例說明某軟件公司要開發(fā)一個(gè)殺毒(Antivirus)軟件,該軟件既可以對(duì)某個(gè)文件夾(Folder)殺毒,也可以對(duì)某個(gè)指定的文件(File)進(jìn)行殺毒。該殺毒軟件還可以根據(jù)各類文件的特點(diǎn),為不同類型的文件提供不同的殺毒方式,例如圖像文件(ImageFile)和文本文件(TextFile)的殺毒方式就有所差異?,F(xiàn)使用組合模式來設(shè)計(jì)該殺毒軟件的整體框架。組合模式的應(yīng)用實(shí)例實(shí)例類圖殺毒軟件框架設(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)Program:客戶端測(cè)試類演示……參考代碼(DesignPattern\CompositeSample)組合模式的應(yīng)用實(shí)例結(jié)果及分析如果需要更換操作節(jié)點(diǎn),例如只對(duì)文件夾“文本文件”進(jìn)行殺毒,客戶端代碼只需修改一行即可,將代碼:改為:在具體實(shí)現(xiàn)時(shí),可以創(chuàng)建圖形化界面讓用戶來選擇所需操作的根節(jié)點(diǎn),無須修改源代碼,符合開閉原則folder1.KillVirus();folder3.KillVirus();透明組合模式與安全組合模式透明組合模式抽象構(gòu)件Component中聲明了所有用于管理成員對(duì)象的方法,包括Add()、Remove(),以及GetChild()等方法在客戶端看來,葉子對(duì)象與容器對(duì)象所提供的方法是一致的,客戶端可以一致地對(duì)待所有的對(duì)象缺點(diǎn)是不夠安全,因?yàn)槿~子對(duì)象和容器對(duì)象在本質(zhì)上是有區(qū)別的透明組合模式與安全組合模式安全組合模式抽象構(gòu)件Component中沒有聲明任何用于管理成員對(duì)象的方法,而是在Composite類中聲明并實(shí)現(xiàn)這些方法對(duì)于葉子對(duì)象,客戶端不可能調(diào)用到這些方法缺點(diǎn)是不夠透明,客戶端不能完全針對(duì)抽象編程,必須有區(qū)別地對(duì)待葉子構(gòu)件和容器構(gòu)件組合模式的優(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),簡(jiǎn)化了客戶端代碼增加新的容器構(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)行限制組合模式的優(yōu)缺點(diǎn)與適用環(huán)境模式適用環(huán)境在具有整體和部分的層次結(jié)構(gòu)中,希望通過一種方式忽略整體與部分的差異,客戶端
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)大全人事管理篇十篇
- 《行政職業(yè)能力測(cè)驗(yàn)》2024年公務(wù)員考試尤溪縣臨考沖刺試卷含解析
- 八下期末考拔高測(cè)試卷(5)(解析版)
- 寒假自習(xí)課 25春初中道德與法治八年級(jí)下冊(cè)教學(xué)課件 第三單元 第五課 第2課時(shí) 基本政治制度
- 《皮外骨傷科病證》課件
- 鐵路線路設(shè)計(jì)合同三篇
- 服裝店衛(wèi)生消毒指南
- 幼兒園工作總結(jié)攜手陪伴成長(zhǎng)無憂
- 餐飲行業(yè)助理工作總結(jié)
- 感恩父母演講稿錦集八篇
- 明細(xì)賬(三欄式)模板
- 正大天虹方矩管鍍鋅方矩管材質(zhì)書
- 2024年山東魯商集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 妊娠劇吐伴酮癥護(hù)理查房課件
- 200#溶劑油安全技術(shù)說明書
- 單位洗車房管理制度
- 廣西壯族自治區(qū)欽州市浦北縣2022-2023學(xué)年七年級(jí)上學(xué)期期末英語(yǔ)試題
- 動(dòng)力學(xué)全套課件
- 廣東省深圳市2022-2023學(xué)年六年級(jí)上學(xué)期語(yǔ)文期末試卷(含答案)6
- 2022-2023學(xué)年北京市海淀區(qū)高一(上)期末生物試卷(附答案詳解)
- 河南省出版物經(jīng)營(yíng)許可證申請(qǐng)登記表
評(píng)論
0/150
提交評(píng)論