舉例講授Java設計形式編程中Decorator裝潢者形式的應用。本站提示廣大學習愛好者:(舉例講授Java設計形式編程中Decorator裝潢者形式的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是舉例講授Java設計形式編程中Decorator裝潢者形式的應用正文
概念
裝潢者形式靜態地將義務附加到對象上。若要擴大功效,裝潢者供給了比繼續更有彈性的替換計劃。
裝潢者和被裝潢對象有雷同的超類型。
你可以用一個或多個裝潢者包裝一個對象。
既然裝潢者和被裝潢對象有雷同的超類型,所以在任何須要原始對象(被包裝的)的場所 ,可以用裝潢過的對象取代它。
裝潢者可以在所拜托被裝潢者的行動之前與/或以後,加上本身的行動,以到達特定的目標。
對象可以在任什麼時候候被裝潢,所以可以在運轉時靜態地、不限量地用你愛好的裝潢者來裝潢
對象。
在Java中,io包下的許多類就是典范的裝潢者形式的表現,如:
裝潢類與被裝潢的類 完成雷同的接口,
被裝潢類,不關懷詳細是哪一個完成類來裝潢它,
異樣的營業辦法,被裝潢類挪用裝潢類的辦法,加強裝潢類的功效
實例:
類圖
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.裝潢對象可以在轉發這些要求之前或今後增長一些附加功效。如許就確保了在運轉時,不消修正給定對象的構造便可以在內部增長附加的功效。
在面向對象的設計中,平日是經由過程繼續來完成對給定類的功效擴大。而裝潢後,持有了真實對象,用以加強其功效。
裝潢者與適配器形式的差別:
關於新職責:適配器也能夠在轉換時增長新的職責,但重要目標不在此。裝潢者形式重要是給被裝潢者增長新職責的。
關於其包裹的對象:適配器是曉得被適配者的具體情形的(就是適配類)。裝潢者只曉得其接口是甚麼,
至於其詳細類型(是基類照樣其他派生類)只要在運轉時代才曉得。