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

舉例講解Java設(shè)計(jì)模式編程中Decorator裝飾者模式的運(yùn)用

 更新時(shí)間:2016年05月10日 09:40:18   作者:匆忙擁擠repeat  
這篇文章主要介紹了Java設(shè)計(jì)模式編程中Decorator裝飾者模式的運(yùn)用,裝飾者模式就是給一個(gè)對(duì)象動(dòng)態(tài)的添加新的功能,裝飾者和被裝飾者實(shí)現(xiàn)同一個(gè)接口,裝飾者持有被裝飾者的實(shí)例,需要的朋友可以參考下

概念

裝飾者模式動(dòng)態(tài)地將責(zé)任附加到對(duì)象上。若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。

201651093234473.png (800×611)

裝飾者和被裝飾對(duì)象有相同的超類型。
你可以用一個(gè)或多個(gè)裝飾者包裝一個(gè)對(duì)象。
既然裝飾者和被裝飾對(duì)象有相同的超類型,所以在任何需要原始對(duì)象(被包裝的)的場(chǎng)合 ,可以用裝飾過(guò)的對(duì)象代替它。
裝飾者可以在所委托被裝飾者的行為之前與/或之后,加上自己的行為,以達(dá)到特定的目的。
對(duì)象可以在任何時(shí)候被裝飾,所以可以在運(yùn)行時(shí)動(dòng)態(tài)地、不限量地用你喜歡的裝飾者來(lái)裝飾
對(duì)象。

在Java中,io包下的很多類就是典型的裝飾者模式的體現(xiàn),如:

  • new BufferedOutputStream(OutputStream out)
  • new BufferedInputStream(InputStream in);
  • new PrintWriter(OutputStream out)
  • new FilterReader(Reader in);

裝飾類與被裝飾的類 實(shí)現(xiàn)相同的接口,
被裝飾類,不關(guān)心具體是哪個(gè)實(shí)現(xiàn)類來(lái)裝飾它,
同樣的業(yè)務(wù)方法,被裝飾類調(diào)用裝飾類的方法,增強(qiáng)裝飾類的功能

實(shí)例:
類圖

201651093343133.jpg (746×488)

public interface IReader { 
  void read(); 
} 

public class Reader implements IReader { 
 
  @Override 
  public void read() { 
    System.out.println("read of Reader"); 
  } 
 
} 

public class BufferedReader implements IReader { 
   
  private IReader mReader; 
  public BufferedReader(IReader reader) { 
    this.mReader = reader; 
  } 
   
  @Override 
  public void read() { 
    System.out.println("read of BufferedReader"); 
    mReader.read(); 
  } 
 
} 

public class Test { 
  public static void main(String[] args) { 
    Reader reader = new Reader(); 
    reader.read(); 
    System.out.println("----------"); 
    BufferedReader bufferedReader = new BufferedReader(reader); 
    bufferedReader.read(); 
 
  } 
} 

特點(diǎn):
1.裝飾對(duì)象和真實(shí)對(duì)象有相同的接口。這樣客戶端對(duì)象就能以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互。
2.裝飾對(duì)象包含一個(gè)真實(shí)對(duì)象的引用(reference)
3.裝飾對(duì)象接受所有來(lái)自客戶端的請(qǐng)求。它把這些請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)的對(duì)象。
4.裝飾對(duì)象可以在轉(zhuǎn)發(fā)這些請(qǐng)求以前或以后增加一些附加功能。這樣就確保了在運(yùn)行時(shí),不用修改給定對(duì)象的結(jié)構(gòu)就可以在外部增加附加的功能。 
在面向?qū)ο蟮脑O(shè)計(jì)中,通常是通過(guò)繼承來(lái)實(shí)現(xiàn)對(duì)給定類的功能擴(kuò)展。而裝飾后,持有了真實(shí)對(duì)象,用以增強(qiáng)其功能。 
 
裝飾者與適配器模式的區(qū)別:
關(guān)于新職責(zé):適配器也可以在轉(zhuǎn)換時(shí)增加新的職責(zé),但主要目的不在此。裝飾者模式主要是給被裝飾者增加新職責(zé)的。
關(guān)于其包裹的對(duì)象:適配器是知道被適配者的詳細(xì)情況的(就是適配類)。裝飾者只知道其接口是什么,
至于其具體類型(是基類還是其他派生類)只有在運(yùn)行期間才知道。

相關(guān)文章

  • groovy腳本定義結(jié)構(gòu)表一鍵生成POJO類

    groovy腳本定義結(jié)構(gòu)表一鍵生成POJO類

    這篇文章主要為大家介紹了groovy腳本定義結(jié)構(gòu)表一鍵生成POJO類示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • RedisTemplate中opsForValue和opsForList方法的使用詳解

    RedisTemplate中opsForValue和opsForList方法的使用詳解

    這篇文章主要介紹了RedisTemplate中opsForValue和opsForList方法的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JavaWeb中Servlet的深入講解

    JavaWeb中Servlet的深入講解

    這篇文章主要介紹了JavaWeb中Servlet的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Springboot詳解底層啟動(dòng)過(guò)程

    Springboot詳解底層啟動(dòng)過(guò)程

    這篇文章主要介紹了SpringBoot啟動(dòng)過(guò)程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用總結(jié)

    Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中比較運(yùn)算符compareTo()、equals()與==的區(qū)別及應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例

    SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot2.3.0配置JPA的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 詳解JAVA 反射機(jī)制

    詳解JAVA 反射機(jī)制

    這篇文章主要介紹了JAVA 反射機(jī)制的相關(guān)知識(shí),文中講解的非常細(xì)致,代碼幫助大家更好的理解學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java中使用Jedis操作Redis的示例代碼

    Java中使用Jedis操作Redis的示例代碼

    本篇文章主要介紹了Java中使用Jedis操作Redis的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • java JDBC系列教程之JDBC類的簡(jiǎn)析與JDBC的基礎(chǔ)操作

    java JDBC系列教程之JDBC類的簡(jiǎn)析與JDBC的基礎(chǔ)操作

    這篇文章主要介紹了java JDBC系列教程之JDBC類的簡(jiǎn)析與JDBC的基礎(chǔ)操作,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java實(shí)現(xiàn)文件批量重命名具體實(shí)例

    Java實(shí)現(xiàn)文件批量重命名具體實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)文件批量重命名具體實(shí)例,需要的朋友可以參考下
    2014-02-02

最新評(píng)論