設(shè)計(jì)模式之裝飾模式_第1頁
設(shè)計(jì)模式之裝飾模式_第2頁
設(shè)計(jì)模式之裝飾模式_第3頁
設(shè)計(jì)模式之裝飾模式_第4頁
設(shè)計(jì)模式之裝飾模式_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上軟件模式課程論文裝飾模式應(yīng)用分析 姓名: XXX 學(xué)號: XXXXXXXXXXX 班級: XXXXXXXXXX 2017年 4 月 16 日目錄1.1摘要裝飾模式是一種用于替代繼承的技術(shù),它通過一種無須定義的子類的方式來給對象動態(tài)增加職責(zé),使用對象之間的關(guān)聯(lián)關(guān)系取代類之間的繼承關(guān)系,在裝飾模式中引入了裝飾類,在裝飾類中既可以調(diào)用被裝飾類的方法,還可以定義新的方法,以便擴(kuò)充類的功能。裝飾模式降低了系統(tǒng)的耦合度,可以動態(tài)增加或刪除對象的職責(zé),并使得需要裝飾的具體構(gòu)件類和具體裝飾類可以獨(dú)立變化,增加新的具體構(gòu)件類和具體裝飾類都非常方便,滿足“開閉原則”的要求。2.1關(guān)鍵字面

2、向?qū)ο螅籮ava接口;接口編程;裝飾模式。3.1開發(fā)工具Eclipse java語言開發(fā)4.1模式定義動態(tài)的給一個(gè)對象增加一些額外的職責(zé),就增加對象功能來說,裝飾模式比生成子類實(shí)現(xiàn)更為靈活。英文定義“Attach additional responsibility to an object dynamically. Decorators provide A flexible alternative to subclassing for extending functionlity”5.1裝飾模式結(jié)構(gòu)a、Component(抽象構(gòu)件)抽象構(gòu)件定義了對象的接口,可以給這些對象動態(tài)增加職責(zé)(方法)。

3、抽象構(gòu)件是具體構(gòu)件和抽象裝飾類的共同父類,它聲明了在具體構(gòu)件中實(shí)現(xiàn)的業(yè)務(wù)方法,它的引入可以使客戶端以一致的方式處理未被裝飾的對象以及裝飾之后的對象,實(shí)現(xiàn)客戶端的透明操作。b、ConcreteComponent(具體構(gòu)件)具體構(gòu)件定義了具體的構(gòu)件對象,實(shí)現(xiàn)了在抽象構(gòu)件中聲明的方法,裝飾器可以給他增加額外的職責(zé)。c、Decorator(抽象裝飾類)抽象裝飾類是抽象構(gòu)件類的子類,用于給具體構(gòu)件增加職責(zé),但是具體職責(zé)在其子類中實(shí)現(xiàn)。它維護(hù)一個(gè)指向抽象構(gòu)件對象的引用,通過該引用可以調(diào)用裝飾之前構(gòu)件對象的方法,并通過其子類擴(kuò)展該方法,以達(dá)到裝飾的目的。D、ConcreteDecorator(具體裝飾類)具

4、體裝飾類是抽象裝飾類的子類,負(fù)責(zé)向構(gòu)件添加新的職責(zé),每一個(gè)具體裝飾類都定義了一些新的行為,它可以調(diào)用在抽象裝飾類中定義方法,并可以增加新的方法以便擴(kuò)充對象的行為。6.1裝飾模式實(shí)例:簡單的手機(jī)(SimplePhone)在接收到來電的時(shí)候,會發(fā)出聲音來提醒主人;而現(xiàn)在我們需要為該手機(jī)添加一項(xiàng)功能,在接收來電的時(shí)候,除了有聲音還能產(chǎn)生振動(JarPhone);還可以得到更加高級的手機(jī)(ComplexPhone),來電時(shí)它不僅能夠發(fā)出聲,產(chǎn)生振動,而且還有閃關(guān)燈提示,現(xiàn)用裝飾模式來模擬手機(jī)功能的升級過程。6.1.1代碼分析6.1.1.1Phone(抽象構(gòu)件)代碼:package XK_Phone;p

5、ublic abstract class Phone public abstract void voice();6.1.1.2 ConcreteComponent(具體構(gòu)件)代碼:/構(gòu)件類public class SimplePhone extends Phonepublic SimplePhone()System.out.println(這是一部簡單手機(jī)!);public void voice()/ TODO Auto-generated method stubSystem.out.println(手機(jī)來電聲音!);6.1.1.3(抽象裝飾類)代碼:Changerpublic class C

6、hanger extends Phone private Phone phone;public Changer (Phone phone)this.phone=phone;Overridepublic void voice() / TODO Auto-generated method stubphone.voice();6.1.1.4 (具體裝飾類):ComplexPhone類/關(guān)聯(lián)JarPhone類public class ComplexPhone extends Changerpublic ComplexPhone(Phone phone)super(phone);System.out.p

7、rintln(變成高級手機(jī)!);flash();public void flash()System.out.println(手機(jī)來電閃爍燈光提示!);JarPhone類public final class JarPhone extends Changerpublic JarPhone(Phone phone) super(phone);/ TODO Auto-generated constructor stubSystem.out.println(手機(jī)增加振動功能!);public void voice()super.voice();System.out.println(來電振動!);6.1.

8、1.5客戶端/客戶類public class Client public static void main(String arg)Phone p1=new SimplePhone();/父類調(diào)用子類方法p1.voice();System.out.println(*);Phone p2=new JarPhone(p1);p2.voice();System.out.println(*);Phone p3=new ComplexPhone(p2);p3.voice();6.1.1.5運(yùn)行結(jié)果:7.1裝飾模式的優(yōu)缺點(diǎn)7.1.1優(yōu)點(diǎn):1、裝飾者模式可以提供比繼承更多的靈活性 2、可以通過一種動態(tài)的方式來

9、擴(kuò)展一個(gè)對象的功能,在運(yùn)行時(shí)選擇不同的裝飾器,從而實(shí)現(xiàn)不同的行為。 3、通過使用不同的具體裝飾類以及這些裝飾類的排列組合,可以創(chuàng)造出很多不同行為的組合。可以使用多個(gè)具體裝飾類來裝飾同一對象,得到功能更為強(qiáng)大的對象。 4、具體構(gòu)件類與具體裝飾類可以獨(dú)立變化,用戶可以根據(jù)需要增加新的具體構(gòu)件類和具體裝飾類,在使用時(shí)再對其進(jìn)行組合,原有代碼無須改變,符合“開閉原則”。7.1.2缺點(diǎn):1、會產(chǎn)生很多的小對象,增加了系統(tǒng)的復(fù)雜性 2、這種比繼承更加靈活機(jī)動的特性,也同時(shí)意味著裝飾模式比繼承更加易于出錯(cuò),排錯(cuò)也很困難,對于多次裝飾的對象,調(diào)試時(shí)尋找錯(cuò)誤可能需要逐級排查,較為煩瑣。8.1結(jié)論1、 組合和委托可以在運(yùn)行時(shí)動態(tài)的添加新的行為,而繼承是靜態(tài)的,在系統(tǒng)編譯時(shí)就已經(jīng)決定了對象的行為。 2、裝飾者模式意味著一群裝飾者類,這些類用來包裝具體組件 3、裝飾者可以在被裝飾者的行為前面或者后面加上自己的行為,甚至可以將被裝飾者的行為整個(gè)取代掉,從而達(dá)到特定的目的。 4、可以用多個(gè)裝飾者包裝一個(gè)組件。 5、裝

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論