欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java設計模式之裝飾模式詳細介紹

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

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

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

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

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

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

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

3)    裝飾與繼承比較圖:

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

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

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

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

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

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

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

7.    裝飾模式的特點:

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

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

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

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

8.    案例:

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

復制代碼 代碼如下:

packagecom.abao.decorate;

 

public interface Component

{

   public void doSomething();

}


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

packagecom.abao.decorate;

public class ConcreteComponent implements Component

{

   @Override

   public void doSomething()

   {

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

   }

}


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

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:
復制代碼 代碼如下:

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:
復制代碼 代碼如下:

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)    客戶端
復制代碼 代碼如下:

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)文章

  • 貨拉拉大數(shù)據(jù)對BitMap的探索實踐詳解

    貨拉拉大數(shù)據(jù)對BitMap的探索實踐詳解

    這篇文章主要為大家介紹了貨拉拉大數(shù)據(jù)對BitMap的探索實踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Java Spring Security認證與授權(quán)及注銷和權(quán)限控制篇綜合解析

    Java Spring Security認證與授權(quán)及注銷和權(quán)限控制篇綜合解析

    Spring Security 是 Spring 家族中的一個安全管理框架,實際上,在 Spring Boot 出現(xiàn)之前,Spring Security 就已經(jīng)發(fā)展了多年了,但是使用的并不多,安全管理這個領(lǐng)域,一直是 Shiro 的天下
    2021-10-10
  • 劍指Offer之Java算法習題精講二叉樹專項訓練

    劍指Offer之Java算法習題精講二叉樹專項訓練

    跟著思路走,之后從簡單題入手,反復去看,做過之后可能會忘記,之后再做一次,記不住就反復做,反復尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • 詳解spring boot starter redis配置文件

    詳解spring boot starter redis配置文件

    spring-boot-starter-Redis主要是通過配置RedisConnectionFactory中的相關(guān)參數(shù)去實現(xiàn)連接redis service。下面通過本文給大家介紹在spring boot的配置文件中redis的基本配置,需要的的朋友參考下
    2017-07-07
  • Spring?boot配置綁定和配置屬性校驗的方式詳解

    Spring?boot配置綁定和配置屬性校驗的方式詳解

    這篇文章主要介紹了Spring?boot配置綁定和配置屬性校驗,SpringBoot 提供了2 種方式進行配置綁定,即使用 @ConfigurationProperties 注解和使用 @Value 注解,需要的朋友可以參考下
    2022-05-05
  • Spring Cloud Feign簡單使用詳解

    Spring Cloud Feign簡單使用詳解

    本篇文章主要介紹了Spring Cloud Feign簡單使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java實現(xiàn)級聯(lián)下拉結(jié)構(gòu)的示例代碼

    Java實現(xiàn)級聯(lián)下拉結(jié)構(gòu)的示例代碼

    在開發(fā)過程中,會遇到很多的實體需要將查出的數(shù)據(jù)處理為下拉或者級聯(lián)下拉的結(jié)構(gòu),提供給前端進行展示。本文為大家介紹了java封裝下拉和級聯(lián)下拉的通用工具類,需要的可以參考一下
    2022-06-06
  • json如何解析混合數(shù)組對象到實體類的list集合里去

    json如何解析混合數(shù)組對象到實體類的list集合里去

    這篇文章主要介紹了json解析混合數(shù)組對象到實體類的list集合里去的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • IDEA中的Structure模塊使用圖文詳解

    IDEA中的Structure模塊使用圖文詳解

    IDEA 的 Structure 功能,也是在看代碼中一個十分常用的功能,最通用的方法,就是點擊 IDEA 左下角的 Structure 標簽頁即可,本文重點介紹IDEA中的Structure模塊使用詳解,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java日常練習題,每天進步一點點(62)

    Java日常練習題,每天進步一點點(62)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08

最新評論