設計模式 (十)裝飾模式(Decorator)

設計模式 (十)裝飾模式(Decorator)

ID:40313348

大小:67.50 KB

頁數(shù):5頁

時間:2019-07-30

設計模式 (十)裝飾模式(Decorator)_第1頁
設計模式 (十)裝飾模式(Decorator)_第2頁
設計模式 (十)裝飾模式(Decorator)_第3頁
設計模式 (十)裝飾模式(Decorator)_第4頁
設計模式 (十)裝飾模式(Decorator)_第5頁
資源描述:

《設計模式 (十)裝飾模式(Decorator)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。

1、設計模式(十)裝飾模式(Decorator)裝飾模式(Decorator)就是使用被裝飾的一個子類的實例,在客戶端將這個子類的實例委托給裝飾類。裝飾模式是結成關系的一個替代方案。簡單的裝飾模式是原理圖入下:裝飾模式以對客服端透明的方式增添了對象的功能,其在與動態(tài)的給對象添加了責任,當然這里的繼承便是靜態(tài)的。其中重要的地方時裝飾對象和真是對象有相同的接口,這樣客戶端就可以和真是對象一樣的交互方式和裝飾對象交互,然后裝飾對象把所有從客戶端接收過來的請求全部轉發(fā)給真是對象,然后在返還給客戶端,這樣裝飾對象就可以再轉發(fā)

2、前或者以后添加一些附加功能而不影響對真是對象的操作,這樣在不改變原有類的基礎想,可以實現(xiàn)對于原有類的這種額外功能的實現(xiàn),增強了程序的復用性。同時裝飾模式比繼承好的地方就是,裝飾模式可以動態(tài)的對已經(jīng)存在的類進行任意的組合,實現(xiàn)想要的功能,而繼承是靜態(tài)的實現(xiàn),不能改變原有類的實現(xiàn),如果要添加更多的功能,只有添加更多的派生類來實現(xiàn),這個簡潔在下面的例子里對于最后一次打印輸出就有很明顯的效果,定義好了兩個裝飾類以后,不用再定義第三個就可以實現(xiàn)兩個裝飾類排列組合的效果。下面就簡單的做了一個通過對于手機接電話的一個擴展,接

3、聽電話之前有一個彩鈴,接受電話之后會回撥一段廣告,這樣就出來了下面的例子:[java]?viewplaincopy1.package?com.designpattern.decorator;??2.??3.public?interface?Phone?{??4.????public?void?recevieCall(String?name);??5.}??[java]?viewplaincopy1.package?com.designpattern.decorator;??2.??3.public?class?

4、ChinaMobile?implements?Phone?{??4.??5.????@Override??6.????public?void?recevieCall(String?name)?{??7.????????System.out.println("step?recevie?"?+?name?+?"?call");??8.????}??9.??10.}??[java]?viewplaincopy1.package?com.designpattern.decorator;??2.??1.public?ab

5、stract?class?Decorator?implements?Phone?{??2.??3.????private?Phone?phone;??4.??5.????public?Decorator(Phone?phone)?{??6.????????this.phone?=?phone;??7.????}??8.??9.????@Override??10.????public?void?recevieCall(String?name)?{??11.????????this.phone.recevieCal

6、l(name);??12.????}??13.??14.}??[java]?viewplaincopy1.package?com.designpattern.decorator;??2.??3.public?class?RingBeforeChinaMobileDecorator?extends?Decorator?{??4.??5.????public?RingBeforeChinaMobileDecorator(Phone?phone)?{??6.????????super(phone);??7.????}

7、??8.??9.????@Override??10.????public?void?recevieCall(String?name)?{??11.????????System.out.println("step?ring?before?recevie?"?+?name?+?"call");??12.????????super.recevieCall(name);??13.????}??14.??15.}??[java]?viewplaincopy1.package?com.designpattern.decor

8、ator;??2.??3.public?class?AdAfterChinaMobileDecorator?extends?Decorator?{??4.??5.????public?AdAfterChinaMobileDecorator(Phone?phone)?{??6.????????super(phone);??7.????}??1.??2.????@Override??3.?

當前文檔最多預覽五頁,下載文檔查看全文

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

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