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

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

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

概念

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

201651093234473.png (800×611)

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

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

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

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

實例:
類圖

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(); 
 
  } 
} 

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

相關(guān)文章

  • Java接口的簡單定義與實現(xiàn)方法示例

    Java接口的簡單定義與實現(xiàn)方法示例

    這篇文章主要介紹了Java接口的簡單定義與實現(xiàn)方法,結(jié)合實例形式分析了java面向?qū)ο蟪绦蛟O(shè)計中接口的概念、功能、定義及使用技巧,需要的朋友可以參考下
    2019-01-01
  • Java實現(xiàn)簡易生產(chǎn)者消費者模型過程解析

    Java實現(xiàn)簡易生產(chǎn)者消費者模型過程解析

    這篇文章主要介紹了Java實現(xiàn)簡易生產(chǎn)者消費者模型過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 詳解APP微信支付(java后臺_統(tǒng)一下單和回調(diào))

    詳解APP微信支付(java后臺_統(tǒng)一下單和回調(diào))

    這篇文章主要介紹了APP微信支付(java后臺_統(tǒng)一下單和回調(diào)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用idea生成springboot程序的docker鏡像的操作指南

    使用idea生成springboot程序的docker鏡像的操作指南

    這篇文章給大家詳細(xì)的介紹了使用idea生成springboot程序的docker鏡像的操作指南,文中通過圖文結(jié)合給大家講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié))

    springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié))

    這篇文章主要介紹了springboot對接支付寶支付接口(詳細(xì)開發(fā)步驟總結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Spring存儲與讀取Bean對象方法

    Spring存儲與讀取Bean對象方法

    在Spring中,要想更簡單的存儲和讀取對象的核心是使用注解,這篇文章主要給大家介紹了關(guān)于Spring如何通過注解存儲和讀取對象的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 一文徹底了解Java的組合模式

    一文徹底了解Java的組合模式

    組合模式(Composite?Pattern)指將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),?使得用戶對單個對象和組合對象的使用具有一致性。本文就來帶大家深入了解一下Java的組合模式吧
    2023-02-02
  • hadoop序列化實現(xiàn)案例代碼

    hadoop序列化實現(xiàn)案例代碼

    序列化想必大家都很熟悉了,對象在進(jìn)行網(wǎng)絡(luò)傳輸過程中,需要序列化之后才能傳輸?shù)娇蛻舳?或者客戶端的數(shù)據(jù)序列化之后送達(dá)到服務(wù)端,本文將為大家介紹Hadoop如何實現(xiàn)序列化,需要的可以參考一下
    2022-01-01
  • Java線程池實現(xiàn)原理詳解

    Java線程池實現(xiàn)原理詳解

    在面向?qū)ο缶幊讨?,?chuàng)建和銷毀對象是很費時間的,因為創(chuàng)建一個對象要獲取內(nèi)存資源或者其它更多資源,在Java中更是如此,虛擬機(jī)將試圖跟蹤每一個對象,以便能夠在對象銷毀后進(jìn)行垃圾回收,本文將對Java線程池實現(xiàn)原理進(jìn)行詳細(xì)介紹,需要的朋友可以參考下
    2023-07-07
  • FastJSON的0day漏洞的解決

    FastJSON的0day漏洞的解決

    本文主要介紹了FastJSON的0day漏洞的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論

新源县| 宁海县| 仁怀市| 桑植县| 曲沃县| 泰顺县| 栾川县| 马关县| 綦江县| 应城市| 大荔县| 沂源县| 新平| 泸溪县| 平顶山市| 拉萨市| 玛纳斯县| 攀枝花市| 长葛市| 泸西县| 阜宁县| 敦煌市| 寿宁县| 雅安市| 永和县| 张北县| 宿迁市| 石狮市| 石阡县| 都匀市| 刚察县| 阳泉市| 乌兰浩特市| 兴隆县| 新营市| 金秀| 惠水县| 湖北省| 竹溪县| 和林格尔县| 三江|