版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、裝飾者模式第7章 設(shè)計(jì)模式實(shí)現(xiàn)1類爆炸調(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ì)模式問題:實(shí)現(xiàn)cost方法7.3 裝飾者模式第7章 設(shè)計(jì)模式當(dāng)哪些因素改變時(shí)會影響這個(gè)設(shè)計(jì)?調(diào)料價(jià)錢的改變會使我們更改現(xiàn)有代碼。一旦出現(xiàn)新的調(diào)料,我們就需要加上新的方法,并改變超類中的cost()方法。以后可能會開發(fā)出新飲料,對于這些飲料而言(冰茶),某些調(diào)料可能并不適合,但是在這個(gè)設(shè)計(jì)方式中,Tea子類仍將繼承那些不合適的方法,比如:hasWhip()。如何顧客想要雙倍摩卡,怎么辦?7
2、.3 裝飾者模式第7章 設(shè)計(jì)模式設(shè)計(jì)原則(Open-ClosedPrinciple)類應(yīng)該對擴(kuò)展開放,對修改關(guān)閉。我們的目標(biāo)是允許類容易擴(kuò)展,在不修改現(xiàn)有代碼的情況下,就可搭配新的行為。如能實(shí)現(xiàn)這樣的目標(biāo),其好處在于:這樣的設(shè)計(jì)具有彈性,可以應(yīng)對改變,可以接受新的功能來應(yīng)對改變的需求。如何讓設(shè)計(jì)的每個(gè)部分都遵循開放-關(guān)閉原則?這通常是無法做到的。要讓OO設(shè)計(jì)同時(shí)具有開放性和關(guān)閉性,又不修改現(xiàn)有的代碼,需要花費(fèi)許多時(shí)間和努力。一般來說,我們沒有足夠的精力把設(shè)計(jì)的每個(gè)部分都這么設(shè)計(jì),這可能只是一種浪費(fèi)。遵循開放-關(guān)閉原則,通常會引入新的抽象層次,增加代碼的復(fù)雜度。你需要把注意力集中在設(shè)計(jì)中最有可能
3、改變的地方,然后應(yīng)用開放-關(guān)閉原則。7.3 裝飾者模式第7章 設(shè)計(jì)模式星巴克咖啡訂單管理系統(tǒng)使用裝飾者模式以飲料(Beverage)為主體,然后在運(yùn)行時(shí)以調(diào)料(Condiment)來裝飾(decorate)飲料比如,顧客想要摩卡和奶泡深焙咖啡,那么:取出一個(gè)深焙咖啡(DarkRoast)對象以摩卡(Mocha)對象裝飾它以奶泡(Whip)對象裝飾它調(diào)用cost方法,并依賴委托(delegrate)將調(diào)料的價(jià)格加上去7.3 裝飾者模式第7章 設(shè)計(jì)模式以DarkRoast對象開始顧客需要摩卡(Mocha),所以建立一個(gè)Mocha對象,并用它將DarkRoast對象包起來7.3 裝飾者模式第7章 設(shè)
4、計(jì)模式顧客也想要奶泡(Whip),所以建立一個(gè)Whip裝飾者,并用它將Mocha對象包起來7.3 裝飾者模式第7章 設(shè)計(jì)模式通過調(diào)用最外圈裝飾者(Whip)的cost即可計(jì)算飲料價(jià)格。7.3 裝飾者模式第7章 設(shè)計(jì)模式“裝飾者模式”特點(diǎn)裝飾者和被裝飾對象具有相同的超類型可以用一個(gè)或多個(gè)裝飾者包裝一個(gè)對象由于裝飾者和被裝飾對象有相同的超類型,所以在任何需要原始對象(被包裝)的場合,都可以用裝飾過的對象代替她裝飾者可以在所委托被裝飾者的行為之前或之后,加上自己的行為,以達(dá)到特定的目的對象可以在任何時(shí)候被裝飾,所以可以在運(yùn)行時(shí)動態(tài)的、不限量的用需要的裝飾者來裝飾對象裝飾者模式定義裝飾者模式動態(tài)地將責(zé)
5、任附加到對象上。若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。7.3 裝飾者模式第7章 設(shè)計(jì)模式7.3 裝飾者模式第7章 設(shè)計(jì)模式7.3 裝飾者模式第7章 設(shè)計(jì)模式問題為什么Decorate類擴(kuò)展自Component類?裝飾者和被裝飾者必須是一樣的類型,我們在此使用繼承達(dá)到“類型匹配”類型匹配意味著裝飾者和被裝飾者具有相同的接口,從而裝飾者可以取代被裝飾者新的行為并不是繼承自超類,而是由組合對象得到,即所有飲料和調(diào)料可以更有彈性的加以混合和匹配我們可以在任何時(shí)候,實(shí)現(xiàn)新的裝飾者增加新的行為。如果依賴?yán)^承,每當(dāng)需要新行為時(shí),必須修改代碼Component類型可以使用抽象類,也可以使用接口7
6、.3 裝飾者模式第7章 設(shè)計(jì)模式問題:如果有一張訂單:如果有一張訂單:“雙倍摩卡雙倍摩卡豆?jié){豆?jié){奶泡奶泡拿鐵拿鐵咖啡咖啡”,應(yīng)該如何進(jìn)行設(shè)計(jì)?,應(yīng)該如何進(jìn)行設(shè)計(jì)?7.3 裝飾者模式第7章 設(shè)計(jì)模式Beverage類Condiment類7.3 裝飾者模式第7章 設(shè)計(jì)模式飲料(被裝飾者)的代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式飲料(被裝飾者)的代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式調(diào)料(裝飾者)的代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式測試代碼7.3 裝飾者模式第7章 設(shè)計(jì)模式測試結(jié)果7.3 裝飾者模式第7章 設(shè)計(jì)模式總結(jié)在我們的代碼中,應(yīng)該允許行為可以被擴(kuò)展,而無需修改現(xiàn)有的代碼裝飾者模式意味著一
7、群裝飾者類,這些類用來包裝具體組件裝飾者反映出被裝飾者的組件類型(具有相同的類型)裝飾者可以在被裝飾者的行為前面或后面加上自己的行為,甚至將被裝飾者的行為整個(gè)取代掉,而達(dá)到特定的目的可以用無數(shù)個(gè)裝飾者包裝一個(gè)組件裝飾者一般對組件的客戶是透明的,除非客戶程序依賴于組件的具體類型裝飾者會導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小對象,如果過度使用,會讓程序變得復(fù)雜7.3 裝飾者模式第7章 設(shè)計(jì)模式問題1星巴克決定在菜單上加上咖啡的容量大小,供顧客選擇小杯(tall)、中杯(grande)、大杯(venti);另外還需要根據(jù)咖啡容量收費(fèi),比如小中大杯咖啡加上豆?jié){(Soy),分別加收0.10、0.15、0.20美金。我們應(yīng)該如何改變裝飾者類應(yīng)對這樣的需求?7.3 裝飾者模式第7章 設(shè)計(jì)模式7.3 裝飾者模式第7章 設(shè)計(jì)模式問題2在裝飾者模式中,是否可以允許裝飾者知道一連串裝飾鏈條中其他裝飾者地存在?比如,我們需要使用getDescription()列出“Whip,DoubleMocha”,而不是“Moc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工培訓(xùn)體檢衛(wèi)生制度
- 小學(xué)衛(wèi)生教育培訓(xùn)制度
- 衛(wèi)生急救培訓(xùn)演練制度
- 微波消融術(shù)術(shù)后用藥指導(dǎo)
- 跨境電商倉儲2025補(bǔ)充協(xié)議書
- 出版社中級考試題目及答案
- 采煤規(guī)程考試試卷及答案
- 2025-2026一年級體育測試卷冀教版
- 理發(fā)店衛(wèi)生相關(guān)制度
- 商場保潔衛(wèi)生紙管理制度
- 【生物】種子的萌發(fā)-2024-2025學(xué)年七年級生物下冊同步教學(xué)課件(人教版2024)
- 光伏發(fā)電安裝質(zhì)量驗(yàn)收評定表
- AQ 1046-2007 地勘時(shí)期煤層瓦斯含量測定方法(正式版)
- 房屋過戶給子女的協(xié)議書的范文
- 超聲振動珩磨裝置的總體設(shè)計(jì)
- 新媒體藝術(shù)的發(fā)展歷程及藝術(shù)特征
- 醫(yī)保違規(guī)行為分類培訓(xùn)課件
- 講課學(xué)生數(shù)學(xué)學(xué)習(xí)成就
- 醫(yī)療器械法規(guī)對互聯(lián)網(wǎng)銷售的限制
- 系桿拱橋系桿預(yù)應(yīng)力施工控制要點(diǎn)
- 三亞市海棠灣椰子洲島土地價(jià)格咨詢報(bào)告樣本及三洲工程造價(jià)咨詢有限公司管理制度
評論
0/150
提交評論