設(shè)計(jì)模式 - 裝飾者模式

設(shè)計(jì)模式 - 裝飾者模式

ID:13891114

大?。?41.50 KB

頁數(shù):10頁

時(shí)間:2018-07-24

設(shè)計(jì)模式 - 裝飾者模式_第1頁
設(shè)計(jì)模式 - 裝飾者模式_第2頁
設(shè)計(jì)模式 - 裝飾者模式_第3頁
設(shè)計(jì)模式 - 裝飾者模式_第4頁
設(shè)計(jì)模式 - 裝飾者模式_第5頁
資源描述:

《設(shè)計(jì)模式 - 裝飾者模式》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、設(shè)計(jì)模式讀書筆記-----裝飾者模式我們都知道,可以使用兩種方式給一個(gè)類或者對象添加行為。一是使用繼承。繼承是給一個(gè)類添加行為的比較有效的途徑。通過使用繼承,可以使得子類在擁有自身方法的同時(shí),還可以擁有父類的方法。但是使用繼承是靜態(tài)的,在編譯的時(shí)候就已經(jīng)決定了子類的行為,我們不便于控制增加行為的方式和時(shí)機(jī)。二是使用關(guān)聯(lián)。組合即將一個(gè)對象嵌入到另一個(gè)對象中,由另一個(gè)對象來決定是否引用該對象來擴(kuò)展自己的行為。這是一種動態(tài)的方式,我們可以在應(yīng)用程序中動態(tài)的控制。與繼承相比,關(guān)聯(lián)關(guān)系的優(yōu)勢就在于不會破壞類的封裝性,且具有較好的松耦合性,可以使系統(tǒng)更加

2、容易維護(hù)。但是它的缺點(diǎn)就在于要創(chuàng)建比繼承更多的對象。一、基本定義裝飾者模式,動態(tài)地將責(zé)任附加到對象上。若要擴(kuò)展功能,裝飾者提供了比繼承更加有彈性的替代方案。二、模式結(jié)構(gòu)裝飾者模式UML結(jié)構(gòu)圖。Component:抽象構(gòu)件。是定義一個(gè)對象接口,可以給這些對象動態(tài)地添加職責(zé)。ConcreteComponent:具體構(gòu)件。是定義了一個(gè)具體的對象,也可以給這個(gè)對象添加一些職責(zé)。Decorator:抽象裝飾類。是裝飾抽象類,繼承了Component,從外類來擴(kuò)展Component類的功能,但對于Component來說,是無需知道Decorator存在的

3、。ConcreteDecorator:具體裝飾類,起到給Component添加職責(zé)的功能。三、實(shí)現(xiàn)裝飾者模式情景模式:星巴茲以擴(kuò)張速度快而聞名。在里面購買咖啡時(shí),可以要求在其中加入各種調(diào)料,星巴茲會根據(jù)所加入的調(diào)料收取不同的費(fèi)用,也就是說不同的咖啡與調(diào)料之間有N多不同的組合方式。每種咖啡和調(diào)料都有不同的收費(fèi)。如果這個(gè)時(shí)候我們使用繼承方式,則會陷入無以復(fù)加的地步。這里會有N多個(gè)類,出現(xiàn)“類爆炸”現(xiàn)象。結(jié)構(gòu)圖如下:裝飾者模式提供了一個(gè)比較好的解決方案。編碼實(shí)現(xiàn):ComponentBeverage.java1publicabstractclassB

4、everage{2protectedStringdescription="UnknownBeverage";34publicStringgetDescription(){5returndescription;6}78publicabstractdoublecost();9}四個(gè)組件:HouseBlend.java1publicclassHouseBlendextendsBeverage{23publicHouseBlend(){4description="HouseBlend";5}67@Override8publicdoublecost()

5、{9return0.89;10}1112}DarkRoast.java1publicclassDarkRoastextendsBeverage{2publicDarkRoast(){3description="DarkRoast";4}5@Override6publicdoublecost(){7return1.05;8}910}Espresso.java1publicclassDarkRoastextendsBeverage{2publicDarkRoast(){3description="DarkRoast";4}5@Override6p

6、ublicdoublecost(){7return1.05;8}910}Decat.java1publicclassDecatextendsBeverage{2publicDecat(){3description="Decat";4}56@Override7publicdoublecost(){8return0.99;9}1011}CondimentDecorator.java1publicabstractclassCondimentDecoratorextendsBeverage{2publicabstractStringgetDescri

7、ption();3}Milk.java1publicclassMilkextendsCondimentDecorator{2Beveragebeverage;34publicMilk(Beveragebeverage){5this.beverage=beverage;6}78@Override9publicStringgetDescription(){10returnbeverage.getDescription()+",Milk";11}1213@Override14publicdoublecost(){15returnbeverage.c

8、ost()+0.3;16}17}Mocha.java1publicclassMochaextendsCondimentDecorator{2Beveragebeve

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。