




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、裝飾者模式第7章 設(shè)計(jì)模式實(shí)現(xiàn)1類(lèi)爆炸調(diào)料的增加/刪除調(diào)料價(jià)格的修改7.3 裝飾者模式第7章 設(shè)計(jì)模式實(shí)現(xiàn)2使用實(shí)例變量和繼承,跟蹤這些調(diào)料7.3 裝飾者模式第7章 設(shè)計(jì)模式實(shí)現(xiàn)27.3 裝飾者模式第7章 設(shè)計(jì)模式問(wèn)題:實(shí)現(xiàn)cost方法7.3 裝飾者模式第7章 設(shè)計(jì)模式當(dāng)哪些因素改變時(shí)會(huì)影響這個(gè)設(shè)計(jì)?調(diào)料價(jià)錢(qián)的改變會(huì)使我們更改現(xiàn)有代碼。一旦出現(xiàn)新的調(diào)料,我們就需要加上新的方法,并改變超類(lèi)中的cost()方法。以后可能會(huì)開(kāi)發(fā)出新飲料,對(duì)于這些飲料而言(冰茶),某些調(diào)料可能并不適合,但是在這個(gè)設(shè)計(jì)方式中,Tea子類(lèi)仍將繼承那些不合適的方法,比如:hasWhip()。如何顧客想要雙倍摩卡,怎么辦?7
2、.3 裝飾者模式第7章 設(shè)計(jì)模式設(shè)計(jì)原則(Open-ClosedPrinciple)類(lèi)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。我們的目標(biāo)是允許類(lèi)容易擴(kuò)展,在不修改現(xiàn)有代碼的情況下,就可搭配新的行為。如能實(shí)現(xiàn)這樣的目標(biāo),其好處在于:這樣的設(shè)計(jì)具有彈性,可以應(yīng)對(duì)改變,可以接受新的功能來(lái)應(yīng)對(duì)改變的需求。如何讓設(shè)計(jì)的每個(gè)部分都遵循開(kāi)放-關(guān)閉原則?這通常是無(wú)法做到的。要讓OO設(shè)計(jì)同時(shí)具有開(kāi)放性和關(guān)閉性,又不修改現(xiàn)有的代碼,需要花費(fèi)許多時(shí)間和努力。一般來(lái)說(shuō),我們沒(méi)有足夠的精力把設(shè)計(jì)的每個(gè)部分都這么設(shè)計(jì),這可能只是一種浪費(fèi)。遵循開(kāi)放-關(guān)閉原則,通常會(huì)引入新的抽象層次,增加代碼的復(fù)雜度。你需要把注意力集中在設(shè)計(jì)中最有可能
3、改變的地方,然后應(yīng)用開(kāi)放-關(guān)閉原則。7.3 裝飾者模式第7章 設(shè)計(jì)模式星巴克咖啡訂單管理系統(tǒng)使用裝飾者模式以飲料(Beverage)為主體,然后在運(yùn)行時(shí)以調(diào)料(Condiment)來(lái)裝飾(decorate)飲料比如,顧客想要摩卡和奶泡深焙咖啡,那么:取出一個(gè)深焙咖啡(DarkRoast)對(duì)象以摩卡(Mocha)對(duì)象裝飾它以奶泡(Whip)對(duì)象裝飾它調(diào)用cost方法,并依賴(lài)委托(delegrate)將調(diào)料的價(jià)格加上去7.3 裝飾者模式第7章 設(shè)計(jì)模式以DarkRoast對(duì)象開(kāi)始顧客需要摩卡(Mocha),所以建立一個(gè)Mocha對(duì)象,并用它將DarkRoast對(duì)象包起來(lái)7.3 裝飾者模式第7章 設(shè)
4、計(jì)模式顧客也想要奶泡(Whip),所以建立一個(gè)Whip裝飾者,并用它將Mocha對(duì)象包起來(lái)7.3 裝飾者模式第7章 設(shè)計(jì)模式通過(guò)調(diào)用最外圈裝飾者(Whip)的cost即可計(jì)算飲料價(jià)格。7.3 裝飾者模式第7章 設(shè)計(jì)模式“裝飾者模式”特點(diǎn)裝飾者和被裝飾對(duì)象具有相同的超類(lèi)型可以用一個(gè)或多個(gè)裝飾者包裝一個(gè)對(duì)象由于裝飾者和被裝飾對(duì)象有相同的超類(lèi)型,所以在任何需要原始對(duì)象(被包裝)的場(chǎng)合,都可以用裝飾過(guò)的對(duì)象代替她裝飾者可以在所委托被裝飾者的行為之前或之后,加上自己的行為,以達(dá)到特定的目的對(duì)象可以在任何時(shí)候被裝飾,所以可以在運(yùn)行時(shí)動(dòng)態(tài)的、不限量的用需要的裝飾者來(lái)裝飾對(duì)象裝飾者模式定義裝飾者模式動(dòng)態(tài)地將責(zé)
5、任附加到對(duì)象上。若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。7.3 裝飾者模式第7章 設(shè)計(jì)模式7.3 裝飾者模式第7章 設(shè)計(jì)模式7.3 裝飾者模式第7章 設(shè)計(jì)模式問(wèn)題為什么Decorate類(lèi)擴(kuò)展自Component類(lèi)?裝飾者和被裝飾者必須是一樣的類(lèi)型,我們?cè)诖耸褂美^承達(dá)到“類(lèi)型匹配”類(lèi)型匹配意味著裝飾者和被裝飾者具有相同的接口,從而裝飾者可以取代被裝飾者新的行為并不是繼承自超類(lèi),而是由組合對(duì)象得到,即所有飲料和調(diào)料可以更有彈性的加以混合和匹配我們可以在任何時(shí)候,實(shí)現(xiàn)新的裝飾者增加新的行為。如果依賴(lài)?yán)^承,每當(dāng)需要新行為時(shí),必須修改代碼Component類(lèi)型可以使用抽象類(lèi),也可以使用接口7
6、.3 裝飾者模式第7章 設(shè)計(jì)模式問(wèn)題:如果有一張訂單:如果有一張訂單:“雙倍摩卡雙倍摩卡豆?jié){豆?jié){奶泡奶泡拿鐵拿鐵咖啡咖啡”,應(yīng)該如何進(jìn)行設(shè)計(jì)?,應(yīng)該如何進(jìn)行設(shè)計(jì)?7.3 裝飾者模式第7章 設(shè)計(jì)模式Beverage類(lèi)Condiment類(lèi)7.3 裝飾者模式第7章 設(shè)計(jì)模式飲料(被裝飾者)的代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式飲料(被裝飾者)的代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式調(diào)料(裝飾者)的代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式測(cè)試代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式測(cè)試結(jié)果7.3 裝飾者模式第7章 設(shè)計(jì)模式總結(jié)在我們的代碼中,應(yīng)該允許行為可以被擴(kuò)展,而無(wú)需修改現(xiàn)有的代碼裝飾者模式意味著一
7、群裝飾者類(lèi),這些類(lèi)用來(lái)包裝具體組件裝飾者反映出被裝飾者的組件類(lèi)型(具有相同的類(lèi)型)裝飾者可以在被裝飾者的行為前面或后面加上自己的行為,甚至將被裝飾者的行為整個(gè)取代掉,而達(dá)到特定的目的可以用無(wú)數(shù)個(gè)裝飾者包裝一個(gè)組件裝飾者一般對(duì)組件的客戶(hù)是透明的,除非客戶(hù)程序依賴(lài)于組件的具體類(lèi)型裝飾者會(huì)導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小對(duì)象,如果過(guò)度使用,會(huì)讓程序變得復(fù)雜7.3 裝飾者模式第7章 設(shè)計(jì)模式問(wèn)題1星巴克決定在菜單上加上咖啡的容量大小,供顧客選擇小杯(tall)、中杯(grande)、大杯(venti);另外還需要根據(jù)咖啡容量收費(fèi),比如小中大杯咖啡加上豆?jié){(Soy),分別加收0.10、0.15、0.20美金。我們應(yīng)該如何改變裝飾者類(lèi)應(yīng)對(duì)這樣的需求?7.3 裝飾者模式第7章 設(shè)計(jì)模式7.3 裝飾者模式第7章 設(shè)計(jì)模式問(wèn)題2在裝飾者模式中,是否可以允許裝飾者知道一連串裝飾鏈條中其他裝飾者地存在?比如,我們需要使用getDescription()列出“Whip,DoubleMocha”,而不是“Moc
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度解除健身器材租賃合同的法律服務(wù)
- 2025年度租賃房屋消防設(shè)施維護(hù)協(xié)議
- 二零二五年度新能源汽車(chē)半股轉(zhuǎn)讓與充電樁建設(shè)合同
- 2025年度模特個(gè)人品牌授權(quán)簽約合同
- 第五章 第二節(jié) 氮及其化合物教學(xué)設(shè)計(jì)-2023-2024學(xué)年高一上學(xué)期化學(xué)人教版2019必修第二冊(cè)
- 2025年度旅游服務(wù)合同解除通知函范本
- 二零二五年度股東分紅權(quán)與公司發(fā)展綁定協(xié)議
- 2025年度環(huán)保產(chǎn)業(yè)合伙公司股權(quán)合作協(xié)議
- 二零二五年度網(wǎng)約車(chē)平臺(tái)司機(jī)服務(wù)合同范本
- 二零二五年度宅基地贈(zèng)與子女及土地權(quán)益交接與維護(hù)合同
- 路面工程重點(diǎn)、關(guān)鍵、和難點(diǎn)工程的施工方案(技術(shù)標(biāo))
- 港口集裝箱物流系統(tǒng)建模與仿真技術(shù)研究-教學(xué)平臺(tái)課件
- 合肥市城市大腦·數(shù)字底座白皮書(shū)2020
- 杭州灣跨海大橋項(xiàng)目案例ppt課件
- (完整版)光榮榜25張模板
- 工業(yè)催化劑作用原理—金屬氧化物催化劑
- 2022年三八婦女節(jié)婦女權(quán)益保障法律知識(shí)競(jìng)賽題庫(kù)及答案(共290題)
- 優(yōu)秀教材推薦意見(jiàn)(真實(shí)的專(zhuān)家意見(jiàn))
- Of studies原文譯文及賞析
- QTD01鋼質(zhì)焊接氣瓶檢驗(yàn)工藝指導(dǎo)書(shū)
- 辛棄疾生平簡(jiǎn)介(課堂PPT)
評(píng)論
0/150
提交評(píng)論