多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > php教程 > 設(shè)計模式06_裝飾者模式

設(shè)計模式06_裝飾者模式

來源:程序員人生   發(fā)布時間:2016-06-12 08:20:05 閱讀次數(shù):2512次

          本文是在學習中的總結(jié),歡迎轉(zhuǎn)載但請注明出處:http://blog.csdn.net/pistolove/article/details/51531519


1、定義

          動態(tài)將職責添加到對象身上。若要擴大功能,裝潢者模式提供了比繼承更加靈活的替換方案。(摘自Head First 中文版第91頁)


2、說明

          通常情況下,在使用繼承設(shè)計子類的行動,是在編譯時靜態(tài)決定的,所有的子類都會繼承到相同的行動,這樣會產(chǎn)生耦合較高。而利用組合來擴大對象的行動,就能夠在運行時動態(tài)地進行擴大。裝潢者模式是組合的1種表現(xiàn),但是裝潢者和被裝潢者要有相同的超類。

         裝潢者模式是針對抽象組件(Component)進行編程。如果要針對具體組件進行編程,需要重新思考利用架構(gòu),斟酌裝潢者模式是不是適合。固然也能夠改變Component接口,增加新的對象行動,實現(xiàn)“半透明”的裝潢者模式,以便能夠在實際項目中做出最好選擇。


3、角色

         抽象構(gòu)件角色(Component):給出1個抽象接口,以規(guī)范準備接收附加責任的對象。

         具體構(gòu)件角色(Concrete Component):定義將要接收附加責任的類。

         裝潢角色(Decorator):持有1個構(gòu)件(Component)對象的援用,并定義1個與抽象構(gòu)件接口1致的接口。

         具體裝潢角色(Concrete Decorator):負責給構(gòu)件對象“貼上”附加的責任


4、類圖

這里寫圖片描述


5、示例

         抽象構(gòu)件角色:Componet

package headfirst.design.decorator; public interface Componet { public void method(); }

         具體構(gòu)件角色(待裝潢者):ConcreateComponet

public class ConcreateComponet implements Componet { @Override public void method() { System.err.println("I am a method"); } }

         裝潢角色:Decorator

package headfirst.design.decorator; public class Decorator implements Componet{ private Componet componet; public Decorator(Componet cp){ this.componet = cp; } @Override public void method() { componet.method(); } }

         具體裝潢角色:ConcreateDecotator

package headfirst.design.decorator; public class ConcreateDecotator extends Decorator{ public ConcreateDecotator(Componet cp) { super(cp); } public void method(){ //可在之前添加方法 addmethodbefore(); super.method(); //可在以后添加方法 addmethodafter(); } private void addmethodafter() { System.err.println("add method after"); } private void addmethodbefore() { System.err.println("add method before"); } }

         測試:Test

package headfirst.design.decorator; public class Test { public static void main(String[] args) { Componet cp = new ConcreateComponet(); Decorator decorator = new ConcreateDecotator(cp); decorator.method(); } }

         運行結(jié)果:

add method before I am a method add method after

6、總結(jié)

         適用性:需擴大1個類的功能,附加額外的職責??梢詣討B(tài)給對象添加功能,也能夠動態(tài)撤消。

         優(yōu)點:Decorator模式與繼承關(guān)系的目的都是要擴大對象的功能,但是Decorator可以提供比繼承更多的靈活性。通過使用不同的具體裝潢類和這些裝潢類的排列組合,設(shè)計師可以創(chuàng)造出很多不同行動的組合。

         缺點:這類比繼承更加靈活機動的特性,也同時意味著更加多的復雜性。裝潢模式會致使設(shè)計中出現(xiàn)許多小類,如果過度使用,會使程序變得很復雜。

         JDK源碼中也有很多地方用到了裝潢者模式。java io就是其中比較典型的范例。例如,InputStream–>FilterInputStream–>BufferedInputStream;其中FilterInputStream是裝潢角色,而BufferedInputStream等是具體的裝潢角色。

         本文只是簡單介紹裝潢者模式,并未對其進行深入探討,略顯粗糙。希望本文對你有所幫助。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产一区二区在线视频观看 | 人善交video欧美 | 欧美黑人巨大videos精品 | 精品久久一区二区 | 欧美freesex10一|3| 国产农村妇女毛片精品久久 | 稀缺资源呦视频在线网站 | 国产免费一级高清淫曰本片 | 欧美一区二区三区精品 | 伊人55影院| 午夜dj在线观看免费高清在线 | 国产乱码一区二区三区四 | 国语高清精品一区二区三区 | 国产精品国产三级国产专不∫ | 欧美日本日韩aⅴ在线视频 欧美日本视频一区 | 456免费视频 | 亚洲视频一区 | 一本大道香蕉中文日本不卡高清二区 | 日本在线不卡免费视频一区 | 亚洲区精选网址 | 最新毛片久热97免费精品视频 | 在线国产小视频 | 亚洲精品色一区二区三区 | 国内自拍视频在线看免费观看 | 免费看羞羞动漫视频网站 | 亚洲天堂视频网站 | 欧美日韩性视频一区二区三区 | 99久久免费国内精品 | 免费观看18视频网站 | 羞羞网站免费 | 男女啪啪成人免费网站 | 国产在线精品福利大全 | 国产小网站 | 91久久偷偷做嫩草影院免费 | 变态 另类 国产 亚洲 | 97碰碰碰免费公开在线视频 | 欧美理论在线 | 欧美aa级| 国产福利在线网址成人 | 欧美j| 国产精品视频永久免费播放 |