版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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)組合模式概述分析在樹(shù)形目錄結(jié)構(gòu)中,包含文件和文件夾兩類(lèi)不同的元素在文件夾中可以包含文件,還可以繼續(xù)包含子文件夾在文件中不能再包含子文件或者子文件夾文件夾容器(Container)文件葉子(Leaf)組合模式概述分析當(dāng)容器對(duì)象的某一個(gè)方法被調(diào)用時(shí),將遍歷整個(gè)樹(shù)形結(jié)構(gòu),尋找也包含這個(gè)方法的成員對(duì)象并調(diào)用執(zhí)行,牽一而動(dòng)百,其中使用了遞歸調(diào)用的機(jī)制來(lái)對(duì)整個(gè)結(jié)構(gòu)進(jìn)行處理由于容器對(duì)象和葉子對(duì)象在功能上的區(qū)別,在使用這些對(duì)象的代碼中必須有區(qū)別地對(duì)待容器對(duì)象和葉子對(duì)象,而實(shí)際上大多數(shù)情況下客戶(hù)端希望一致地處理它們,因?yàn)閷?duì)于這些對(duì)象的區(qū)別對(duì)待將會(huì)使程序非常復(fù)雜if(is容器對(duì)象){//處理容器對(duì)象}elseif(is葉子對(duì)象){//處理葉子對(duì)象}組合模式概述如何一致地對(duì)待容器對(duì)象和葉子對(duì)象?組合模式組合模式通過(guò)一種巧妙的設(shè)計(jì)方案使得用戶(hù)可以一致性地處理整個(gè)樹(shù)形結(jié)構(gòu)或者樹(shù)形結(jié)構(gòu)的一部分,它描述了如何將容器對(duì)象和葉子對(duì)象進(jìn)行遞歸組合,使得用戶(hù)在使用時(shí)無(wú)須對(duì)它們進(jìn)行區(qū)分,可以一致地對(duì)待容器對(duì)象和葉子對(duì)象。組合模式概述組合模式定義對(duì)象結(jié)構(gòu)型模式組合模式:組合多個(gè)對(duì)象形成樹(shù)形結(jié)構(gòu)以表示具有部分-整體關(guān)系的層次結(jié)構(gòu)。組合模式讓客戶(hù)端可以統(tǒng)一對(duì)待單個(gè)對(duì)象和組合對(duì)象。CompositePattern:Composeobjectsintotreestructurestorepresentpart-wholehierarchies.Compositeletsclientstreatindividualobjectsandcompositionsofobjectsuniformly.組合模式概述組合模式定義又稱(chēng)為“部分-整體”(Part-Whole)模式將對(duì)象組織到樹(shù)形結(jié)構(gòu)中,可以用來(lái)描述整體與部分的關(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í)例說(shuō)明某軟件公司要開(kāi)發(fā)一個(gè)殺毒(Antivirus)軟件,該軟件既可以對(duì)某個(gè)文件夾(Folder)殺毒,也可以對(duì)某個(gè)指定的文件(File)進(jìn)行殺毒。該殺毒軟件還可以根據(jù)各類(lèi)文件的特點(diǎn),為不同類(lèi)型的文件提供不同的殺毒方式,例如圖像文件(ImageFile)和文本文件(TextFile)的殺毒方式就有所差異?,F(xiàn)使用組合模式來(lái)設(shè)計(jì)該殺毒軟件的整體框架。組合模式的應(yīng)用實(shí)例實(shí)例類(lèi)圖殺毒軟件框架設(shè)計(jì)結(jié)構(gòu)圖組合模式的應(yīng)用實(shí)例實(shí)例代碼(1)AbstractFile:抽象文件類(lèi),充當(dāng)抽象構(gòu)件類(lèi)(2)ImageFile:圖像文件類(lèi),充當(dāng)葉子構(gòu)件類(lèi)(3)TextFile:文本文件類(lèi),充當(dāng)葉子構(gòu)件類(lèi)(4)VideoFile:視頻文件類(lèi),充當(dāng)葉子構(gòu)件類(lèi)(5)Folder:文件夾類(lèi),充當(dāng)容器構(gòu)件類(lèi)(6)Program:客戶(hù)端測(cè)試類(lèi)演示……參考代碼(DesignPattern\CompositeSample)組合模式的應(yīng)用實(shí)例結(jié)果及分析如果需要更換操作節(jié)點(diǎn),例如只對(duì)文件夾“文本文件”進(jìn)行殺毒,客戶(hù)端代碼只需修改一行即可,將代碼:改為:在具體實(shí)現(xiàn)時(shí),可以創(chuàng)建圖形化界面讓用戶(hù)來(lái)選擇所需操作的根節(jié)點(diǎn),無(wú)須修改源代碼,符合開(kāi)閉原則folder1.KillVirus();folder3.KillVirus();透明組合模式與安全組合模式透明組合模式抽象構(gòu)件Component中聲明了所有用于管理成員對(duì)象的方法,包括Add()、Remove(),以及GetChild()等方法在客戶(hù)端看來(lái),葉子對(duì)象與容器對(duì)象所提供的方法是一致的,客戶(hù)端可以一致地對(duì)待所有的對(duì)象缺點(diǎn)是不夠安全,因?yàn)槿~子對(duì)象和容器對(duì)象在本質(zhì)上是有區(qū)別的透明組合模式與安全組合模式安全組合模式抽象構(gòu)件Component中沒(méi)有聲明任何用于管理成員對(duì)象的方法,而是在Composite類(lèi)中聲明并實(shí)現(xiàn)這些方法對(duì)于葉子對(duì)象,客戶(hù)端不可能調(diào)用到這些方法缺點(diǎn)是不夠透明,客戶(hù)端不能完全針對(duì)抽象編程,必須有區(qū)別地對(duì)待葉子構(gòu)件和容器構(gòu)件組合模式的優(yōu)缺點(diǎn)與適用環(huán)境模式優(yōu)點(diǎn)可以清楚地定義分層次的復(fù)雜對(duì)象,表示對(duì)象的全部或部分層次,讓客戶(hù)端忽略了層次的差異,方便對(duì)整個(gè)層次結(jié)構(gòu)進(jìn)行控制客戶(hù)端可以一致地使用一個(gè)組合結(jié)構(gòu)或其中單個(gè)對(duì)象,不必關(guān)心處理的是單個(gè)對(duì)象還是整個(gè)組合結(jié)構(gòu),簡(jiǎn)化了客戶(hù)端代碼增加新的容器構(gòu)件和葉子構(gòu)件都很方便,符合開(kāi)閉原則為樹(shù)形結(jié)構(gòu)的面向?qū)ο髮?shí)現(xiàn)提供了一種靈活的解決方案組合模式的優(yōu)缺點(diǎn)與適用環(huán)境模式缺點(diǎn)在增加新構(gòu)件時(shí)很難對(duì)容器中的構(gòu)件類(lèi)型進(jìn)行限制組合模式的優(yōu)缺點(diǎn)與適用環(huán)境模式適用環(huán)境在具有整體和部分的層次結(jié)構(gòu)中,希望通過(guò)一種方式忽略整體與部分的差異,客戶(hù)端
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 光大銀行金融市場(chǎng)部總經(jīng)理面試題庫(kù)含答案
- 京東物流調(diào)度員面試技巧與答案
- 電商公司客服文員面試技巧與答案
- 電商物流經(jīng)理面試常見(jiàn)問(wèn)題及答案
- 程序員項(xiàng)目架構(gòu)師面試題含答案
- 2025年智能城市建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年城市水資源綜合利用項(xiàng)目可行性研究報(bào)告
- 2025年自動(dòng)化倉(cāng)儲(chǔ)系統(tǒng)開(kāi)發(fā)與運(yùn)營(yíng)項(xiàng)目可行性研究報(bào)告
- 2025年鄉(xiāng)村振興戰(zhàn)略產(chǎn)業(yè)園區(qū)發(fā)展項(xiàng)目可行性研究報(bào)告
- 2025年園區(qū)智慧能源管理項(xiàng)目可行性研究報(bào)告
- 紀(jì)委談話(huà)筆錄模板經(jīng)典
- 消防安全制度和操作規(guī)程
- 叉車(chē)安全技術(shù)交底
- 單人徒手心肺復(fù)蘇操作評(píng)分表(醫(yī)院考核標(biāo)準(zhǔn)版)
- 國(guó)家預(yù)算實(shí)驗(yàn)報(bào)告
- 工業(yè)園區(qū)綜合能源智能管理平臺(tái)建設(shè)方案合集
- 附件1:中國(guó)聯(lián)通動(dòng)環(huán)監(jiān)控系統(tǒng)B接口技術(shù)規(guī)范(V3.0)
- 正弦函數(shù)、余弦函數(shù)的圖象 說(shuō)課課件
- 閉合性顱腦損傷病人護(hù)理查房
- 《你看起來(lái)好像很好吃》繪本課件
- 囊袋皺縮綜合征課件
評(píng)論
0/150
提交評(píng)論