程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 舉例講授Java設計形式編程中Decorator裝潢者形式的應用

舉例講授Java設計形式編程中Decorator裝潢者形式的應用

編輯:關於JAVA

舉例講授Java設計形式編程中Decorator裝潢者形式的應用。本站提示廣大學習愛好者:(舉例講授Java設計形式編程中Decorator裝潢者形式的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是舉例講授Java設計形式編程中Decorator裝潢者形式的應用正文


概念

裝潢者形式靜態地將義務附加到對象上。若要擴大功效,裝潢者供給了比繼續更有彈性的替換計劃。

裝潢者和被裝潢對象有雷同的超類型。
你可以用一個或多個裝潢者包裝一個對象。
既然裝潢者和被裝潢對象有雷同的超類型,所以在任何須要原始對象(被包裝的)的場所 ,可以用裝潢過的對象取代它。
裝潢者可以在所拜托被裝潢者的行動之前與/或以後,加上本身的行動,以到達特定的目標。
對象可以在任什麼時候候被裝潢,所以可以在運轉時靜態地、不限量地用你愛好的裝潢者來裝潢
對象。

在Java中,io包下的許多類就是典范的裝潢者形式的表現,如:

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

裝潢類與被裝潢的類 完成雷同的接口,
被裝潢類,不關懷詳細是哪一個完成類來裝潢它,
異樣的營業辦法,被裝潢類挪用裝潢類的辦法,加強裝潢類的功效

實例:
類圖

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.裝潢對象接收一切來自客戶真個要求。它把這些要求轉發給真實的對象。
4.裝潢對象可以在轉發這些要求之前或今後增長一些附加功效。如許就確保了在運轉時,不消修正給定對象的構造便可以在內部增長附加的功效。 
在面向對象的設計中,平日是經由過程繼續來完成對給定類的功效擴大。而裝潢後,持有了真實對象,用以加強其功效。 
 
裝潢者與適配器形式的差別:
關於新職責:適配器也能夠在轉換時增長新的職責,但重要目標不在此。裝潢者形式重要是給被裝潢者增長新職責的。
關於其包裹的對象:適配器是曉得被適配者的具體情形的(就是適配類)。裝潢者只曉得其接口是甚麼,
至於其詳細類型(是基類照樣其他派生類)只要在運轉時代才曉得。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved