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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、ublic abstract class Phone public abstract void voice();6.1.1.2 ConcreteComponent(具體構件)代碼:/構件類public class SimplePhone extends Phonepublic SimplePhone()System.out.println(這是一部簡單手機!);public void voice()/ TODO Auto-generated method stubSystem.out.println(手機來電聲音!);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類/關聯(lián)JarPhone類public class ComplexPhone extends Changerpublic ComplexPhone(Phone phone)super(phone);System.out.p

7、rintln(變成高級手機!);flash();public void flash()System.out.println(手機來電閃爍燈光提示!);JarPhone類public final class JarPhone extends Changerpublic JarPhone(Phone phone) super(phone);/ TODO Auto-generated constructor stubSystem.out.println(手機增加振動功能!);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運行結果:7.1裝飾模式的優(yōu)缺點7.1.1優(yōu)點:1、裝飾者模式可以提供比繼承更多的靈活性 2、可以通過一種動態(tài)的方式來

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論