日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 設計模式06_裝飾者模式

設計模式06_裝飾者模式

來源:程序員人生   發布時間:2016-06-12 08:20:05 閱讀次數:2518次

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


1、定義

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


2、說明

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

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


3、角色

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

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

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

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


4、類圖

這里寫圖片描述


5、示例

         抽象構件角色:Componet

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

         具體構件角色(待裝潢者):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(); } }

         運行結果:

add method before I am a method add method after

6、總結

         適用性:需擴大1個類的功能,附加額外的職責。可以動態給對象添加功能,也能夠動態撤消。

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

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

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

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲午夜在线观看 | 日本在线影院 | 欧美三级网 | 亚洲三区在线观看 | 亚洲福利精品 | 中文字幕一区在线观看视频 | 免费黄色高清视频 | 国产高清在线视频 | 亚洲国产一区二区视频 | 一级片黄色 | 欧美日韩国产精品综合 | 99在线免费视频 | 中文久久 | 国产精品久久久久久久免费软件 | 亚洲免费看片 | 91视频国产一区 | 99精品一区二区 | 99久久精品免费看国产免费软件 | 91网在线| 91麻豆蜜桃一区二区三区 | 亚洲精品人成 | 黄色成人av网站 | 国产精品亚洲成在人线 | 午夜激情免费 | 午夜精品久久久久久毛片 | 久久av综合 | 亚洲福利在线观看 | 欧美 日韩 中文字幕 | 亚洲第一页在线 | 不卡一区二区三区四区 | 国产日韩精品一区 | 精品国产乱码久久久久久久软件 | 精品一区二三区 | 三级日韩 | 亚洲欧洲成人av每日更新 | 国产午夜精品一区二区三区四区 | 麻豆精品网站 | 国产91av在线 | 在线免费av网址 | 91午夜精品| 久久久久成人免费视频 |