一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java SE的裝飾模式

 昵稱9918558 2012-05-08

Java SE的裝飾模式

首先從語義上理解一下什么是裝飾模式:

簡單一點(diǎn),就拿女孩兒的打扮吧,最基本的吧,衣服是必須的。其它剩下的都是裝飾了,比如說耳環(huán)、戒指、發(fā)卡等。。。那么這些裝飾品的共同特點(diǎn)就是時用性(注意是時間的時哦),也就是說我們拿來了就可以用了。

回歸正題,理解一下java中的裝飾模式,其實(shí)其本質(zhì)都是一樣的,就是為了實(shí)現(xiàn)一種拿來就用的目的。那么我們就需要為每一個裝飾品定義一個實(shí)現(xiàn)類,但是有一個情況出現(xiàn)了,如果我們這些類沒有組織,那么在使用的時候必須都根據(jù)類的名字生成其對象,對用戶而言有太多的類名,沒有同一的名字(例如:耳環(huán)、手鐲等都屬于首飾,那么首飾就是一個同一的名字),那么我們就可以讓這些具有具體價值、作用的類都繼承自同一個類,根據(jù)java的多態(tài)特性,就很容易實(shí)現(xiàn)對用戶展示同一個類的名字。

下面是張龍老師對此的講解:

裝飾模式又名包裝(Wrapper)模式

裝飾模式以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個替代方案

裝飾模式以對客戶透明的方式動態(tài)的給一個對象附加上更多的責(zé)任。換言之,客戶端并不會覺得對象在裝飾前和裝飾后有什么不同。

裝飾模式可以在不創(chuàng)造更多子類的情況下,將對象的功能加以擴(kuò)展。

裝飾模式把客戶端的調(diào)用委派到被裝飾類。裝飾模式的關(guān)鍵在于這種擴(kuò)展完全是透明的。

裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)的擴(kuò)展一個對象的功能。它是通過創(chuàng)建一個包裝對象,也就是裝飾來包裹真實(shí)的對象。

裝飾模式的角色:

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

–具體構(gòu)件角色(ConcreteComponent):定義一個將要接收附加責(zé)任的類。

–裝飾角色(Decorator):持有一個構(gòu)件(Component)對象的引用,并定義一個與抽象構(gòu)件接口一致的接口

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

用語言太難表達(dá),還是看代碼吧:

package dong.application.decorate;

public interface Component

{

       publicvoid doSomething();

}

 

 

package dong.application.decorate;

public class ConcreteComponent implements Component

{

       @Override

       publicvoid doSomething()

       {

              System.out.println("MethodA");

       }

}

 

 

package dong.application.decorate;

public class Decorator implements Component

{

       privateComponent component;

       

       publicDecorator(Component component)

       {

              this.component= component;

       }

       @Override

       publicvoid doSomething()

       {

              component.doSomething();

       }

}

 

 

package dong.application.decorate;

public class ConcreteComponent1 extendsDecorator implements Component

{

       publicConcreteComponent1(Component component)

       {

              super(component);

       }     

       @Override

       publicvoid doSomething()

       {

              super.doSomething();

              

              doAnotherThing();

       }

       privatevoid doAnotherThing()

       {

              System.out.println("MethodB");

       }

}

 

 

package dong.application.decorate;

public class ConcreteComponent2 extendsDecorator implements Component

{

       publicConcreteComponent2(Component component)

       {

              super(component);

       }

       @Override

       publicvoid doSomething()

       {

              super.doSomething();

              this.doAnotherThing();

       }

       privatevoid doAnotherThing()

       {

              System.out.println("MethodC");

       }

}

 

 

package dong.application.decorate;

public class Clent

{

       publicstatic void main(String[] args)

       {

              Componentcomponent = new ConcreteComponent();

              Componentcomponent1 = new ConcreteComponent1(component);

              Componentcomponent2 = new ConcreteComponent2(component1);

              component2.doSomething();

       }

}

 

輸出結(jié)果:

MethodA

MethodB

MethodC

分析一下其執(zhí)行流程,加深對裝飾模式的理解。

當(dāng)執(zhí)行到主函數(shù)的:component2.doSomething();時會去執(zhí)行component1.doSomething(),然后會進(jìn)入到component.doSomething(),此時輸出MethodA然后執(zhí)行component1.doAnotherthing(),此時輸出MethodB然后執(zhí)行component2.doAnotherthing()輸出Method C。

容易知道,它是按照包裝的順序執(zhí)行的,包裝在最內(nèi)層的最先執(zhí)行。然后由內(nèi)向外依次執(zhí)行。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产永久免费高清在线精品| 丰满少妇被猛烈撞击在线视频| 视频一区日韩经典中文字幕| 国产又粗又长又大的视频| 国产又粗又黄又爽又硬的| 邻居人妻人公侵犯人妻视频| 亚洲午夜精品视频在线| 成人精品日韩专区在线观看| 青青操视频在线观看国产| 久久99夜色精品噜噜亚洲av| 激情五月综五月综合网| 日韩精品亚洲精品国产精品| 亚洲熟女精品一区二区成人| 亚洲中文字幕免费人妻| 丁香六月婷婷基地伊人| 中文字幕日韩无套内射| 女同伦理国产精品久久久| 九九热国产这里只有精品| 中文字幕一二区在线观看| 91在线播放在线播放观看| 五月婷日韩中文字幕四虎| 成年人免费看国产视频| 粉嫩内射av一区二区| 久久香蕉综合网精品视频| 亚洲国产精品久久综合网| 国产黑人一区二区三区| 亚洲午夜av久久久精品| 日本在线高清精品人妻| 日本在线 一区 二区| 国产91色综合久久高清| 91久久精品国产成人| 午夜久久久精品国产精品| 亚洲另类欧美综合日韩精品| 欧美成人高清在线播放| 欧美精品专区一区二区| 99精品国产一区二区青青| 中字幕一区二区三区久久蜜桃| 粉嫩国产一区二区三区在线| 亚洲中文字幕视频一区二区| 男女一进一出午夜视频| 国产三级不卡在线观看视频|