裝飾者模式講課講稿_第1頁(yè)
裝飾者模式講課講稿_第2頁(yè)
裝飾者模式講課講稿_第3頁(yè)
裝飾者模式講課講稿_第4頁(yè)
裝飾者模式講課講稿_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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類爆炸調(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)料,我們就需要加上新的方法,并改變超類中的cost()方法。以后可能會(huì)開(kāi)發(fā)出新飲料,對(duì)于這些飲料而言(冰茶),某些調(diào)料可能并不適合,但是在這個(gè)設(shè)計(jì)方式中,Tea子類仍將繼承那些不合適的方法,比如:hasWhip()。如何顧客想要雙倍摩卡,怎么辦?7

2、.3 裝飾者模式第7章 設(shè)計(jì)模式設(shè)計(jì)原則(Open-ClosedPrinciple)類應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。我們的目標(biāo)是允許類容易擴(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方法,并依賴委托(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ì)象具有相同的超類型可以用一個(gè)或多個(gè)裝飾者包裝一個(gè)對(duì)象由于裝飾者和被裝飾對(duì)象有相同的超類型,所以在任何需要原始對(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類擴(kuò)展自Component類?裝飾者和被裝飾者必須是一樣的類型,我們?cè)诖耸褂美^承達(dá)到“類型匹配”類型匹配意味著裝飾者和被裝飾者具有相同的接口,從而裝飾者可以取代被裝飾者新的行為并不是繼承自超類,而是由組合對(duì)象得到,即所有飲料和調(diào)料可以更有彈性的加以混合和匹配我們可以在任何時(shí)候,實(shí)現(xiàn)新的裝飾者增加新的行為。如果依賴?yán)^承,每當(dāng)需要新行為時(shí),必須修改代碼Component類型可以使用抽象類,也可以使用接口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類Condiment類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)包裝具體組件裝飾者反映出被裝飾者的組件類型(具有相同的類型)裝飾者可以在被裝飾者的行為前面或后面加上自己的行為,甚至將被裝飾者的行為整個(gè)取代掉,而達(dá)到特定的目的可以用無(wú)數(shù)個(gè)裝飾者包裝一個(gè)組件裝飾者一般對(duì)組件的客戶是透明的,除非客戶程序依賴于組件的具體類型裝飾者會(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)該如何改變裝飾者類應(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)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論