最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java設(shè)計模式之裝飾模式詳細(xì)介紹

 更新時間:2013年12月23日 16:00:28   作者:  
這篇文章主要介紹了java設(shè)計模式之裝飾模式,有需要的朋友可以參考一下

1.    裝飾模式(Decorator)的定義:又名包裝(Wrapper)模式,裝飾模式以對客戶端透明的方式擴(kuò)展對象的功能,是繼承關(guān)系的一個替代方案。

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

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

4.    裝飾模式與類繼承的區(qū)別:

1)    裝飾模式是一種動態(tài)行為,對已經(jīng)存在類進(jìn)行隨意組合,而類的繼承是一種靜態(tài)的行為,一個類定義成什么樣的,該類的對象便具有什么樣的功能,無法動態(tài)的改變。

2)    裝飾模式擴(kuò)展的是對象的功能,不需要增加類的數(shù)量,而類繼承擴(kuò)展是類的功能,在繼承的關(guān)系中,如果我們想增加一個對象的功能,我們只能通過繼承關(guān)系,在子類中增加兩個方法。

3)    裝飾與繼承比較圖:

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

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

6.    裝飾模式的構(gòu)成:

1)    抽象構(gòu)建角色(Component):給出一個抽象的接口,以規(guī)范準(zhǔn)備接受附加責(zé)任的對象。相當(dāng)于i/o流里面InputStream/OutputStream和Reader/Writer。

2)    具體的構(gòu)建角色(ConcreteComponent):定義一個將要接受附加責(zé)任的類。相當(dāng)于i/o里面的FileOutputStream和FileInputStream。

3)    裝飾角色(Docorator):持有一個抽象構(gòu)建(Component)角色的引用,并定義一個與抽象構(gòu)件一致的接口。相當(dāng)于i/o里面的FilerOutputStream和FilterInputStream。

4)    具體的裝飾角色(ConcreteDecorator):負(fù)責(zé)給構(gòu)建對象“貼上”附加的責(zé)任。相當(dāng)于i/o流里面的BufferedOutputStream和BufferedInputStream以及DataOutputStream和DataInputSrtream。

7.    裝飾模式的特點:

1)    裝飾對象和真實對象具有相同的接口,這樣客戶端對象就可以以真實對象的相同的方式和裝飾對象交互。

2)    裝飾對象包含一個真實對象的引用(reference).

3)    裝飾對象接受所有來自客戶端的請求,它把這些請求轉(zhuǎn)發(fā)給真實的對象。

4)    裝飾對象可以在轉(zhuǎn)發(fā)這些請求以前或者以后增加一些附加的功能。這樣就能確保在運行時,不用修改給定對象結(jié)構(gòu)就可以在外部增加附加的功能。在面向?qū)ο蟮某绦蛟O(shè)計中,通常是使用繼承的關(guān)系來擴(kuò)展給定類的功能。

8.    案例:

1)    抽象的構(gòu)建接口:

復(fù)制代碼 代碼如下:

packagecom.abao.decorate;

 

public interface Component

{

   public void doSomething();

}


2)    具體的構(gòu)建角色:
復(fù)制代碼 代碼如下:

packagecom.abao.decorate;

public class ConcreteComponent implements Component

{

   @Override

   public void doSomething()

   {

      System.out.println("功能A");

   }

}


3)    裝飾角色:
復(fù)制代碼 代碼如下:

packagecom.abao.decorate;

 

public class Decorate implements Component

{

   private Component component;

   public Decorate(Component component)

   {

      this.component = component;

   }

 

   @Override

   public void doSomething()

   {

      component.doSomething();

   }

}


4)    具體裝飾角色1:
復(fù)制代碼 代碼如下:

packagecom.abao.decorate;

 

public class ConcreteDecorate1 extends Decorate

{

   public ConcreteDecorate1(Component component)

   {

      super(component);

   }

   @Override

   public void doSomething()

   {

      super.doSomething();

    

      this.doAnotherDosomething();

   }

   private void doAnotherDosomething()

   {

      System.out.println("功能B");

   }

}


5)    具體裝飾角色2:
復(fù)制代碼 代碼如下:

packagecom.abao.decorate;

 

public class ConcreteDecorate2 extends Decorate

{

   public ConcreteDecorate2(Component component)

   {

      super(component);

   }

   @Override

   public void doSomething()

   {

      super.doSomething();

    

      this.doAnotherDosomething();

    

   }

   private void doAnotherDosomething()

   {

      System.out.println("功能C");

   }

}


6)    客戶端
復(fù)制代碼 代碼如下:

packagecom.abao.decorate;

 

public class Client

{

   public static void main(String[] args)

   {

 

      Component component = new ConcreteDecorate1(

        new ConcreteDecorate2(new ConcreteComponent()));

      component.doSomething();

   }

}


9.    完!

相關(guān)文章

  • SpringBoot攔截器的使用小結(jié)

    SpringBoot攔截器的使用小結(jié)

    今天給大家總結(jié)一下SpringBoot下攔截器的使用,需要的朋友參考下吧
    2017-05-05
  • 如何解決@NotBlank不生效的問題

    如何解決@NotBlank不生效的問題

    這篇文章主要介紹了如何解決@NotBlank不生效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot整合MongoDB實現(xiàn)事務(wù)管理

    SpringBoot整合MongoDB實現(xiàn)事務(wù)管理

    Spring Boot是一種快速開發(fā)Spring應(yīng)用的方式,它提供了大量的自動配置和默認(rèn)設(shè)置,以簡化開發(fā)流程,MongoDB是一個基于文檔的NoSQL數(shù)據(jù)庫,本文將介紹如何在Spring Boot應(yīng)用中整合MongoDB,并實現(xiàn)事務(wù)管理,需要的朋友可以參考下
    2024-07-07
  • java web驗證碼實現(xiàn)代碼分享

    java web驗證碼實現(xiàn)代碼分享

    這篇文章主要為大家分享了java web驗證碼的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Spring實戰(zhàn)之ResourceLoaderAware加載資源用法示例

    Spring實戰(zhàn)之ResourceLoaderAware加載資源用法示例

    這篇文章主要介紹了Spring實戰(zhàn)之ResourceLoaderAware加載資源用法,結(jié)合實例形式分析了spring使用ResourceLoaderAware加載資源相關(guān)配置與操作技巧,需要的朋友可以參考下
    2020-01-01
  • 詳解Spring Cloud Feign 熔斷配置的一些小坑

    詳解Spring Cloud Feign 熔斷配置的一些小坑

    這篇文章主要介紹了詳解Spring Cloud Feign 熔斷配置的一些小坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 如何利用jwt來保護(hù)你的接口服務(wù)

    如何利用jwt來保護(hù)你的接口服務(wù)

    項目軟件要對外提供部分定制接口,為了保證軟件數(shù)據(jù)的安全性,這篇文章主要給大家介紹了關(guān)于如何利用jwt來保護(hù)你的接口服務(wù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java面向?qū)ο筮x擇題總結(jié)歸納

    Java面向?qū)ο筮x擇題總結(jié)歸納

    今天小編就為大家分享一篇關(guān)于Java面向?qū)ο筮x擇題總結(jié)歸納,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 解析springboot集成AOP實現(xiàn)日志輸出的方法

    解析springboot集成AOP實現(xiàn)日志輸出的方法

    如果這需要在每一個controller層去寫的話代碼過于重復(fù),于是就使用AOP定義切面 對其接口調(diào)用前后進(jìn)行攔截日志輸出。接下來通過本文給大家介紹springboot集成AOP實現(xiàn)日志輸出,需要的朋友可以參考下
    2021-11-11
  • SpringBoot優(yōu)化接口響應(yīng)時間的九個技巧

    SpringBoot優(yōu)化接口響應(yīng)時間的九個技巧

    在實際開發(fā)中,提升接口響應(yīng)速度是一件挺重要的事,特別是在面臨大量用戶請求的時候,本文為大家整理了9個SpringBoot優(yōu)化接口響應(yīng)時間的技巧,希望對大家有所幫助
    2024-01-01

最新評論

泸定县| 泸定县| 沁源县| 林西县| 五大连池市| 迁安市| 黄龙县| 星座| 威远县| 资中县| 鹤岗市| 广西| 桃园市| 清流县| 镇远县| 永定县| 乌苏市| 黄龙县| 土默特左旗| 鄂托克旗| 兴和县| 蕉岭县| 阿拉善盟| 涪陵区| 石阡县| 东乡县| 会同县| 建水县| 阜南县| 陆河县| 万载县| 巧家县| 安龙县| 山阳县| 阿鲁科尔沁旗| 法库县| 富阳市| 东阳市| 库尔勒市| 通江县| 韶关市|