步驟一:定義一個基類,裡面放置需要裝飾的方法,基類可以是類,也可以是介面
public interface Sourceable { public void method();}
步驟二:定義一個被裝飾類,繼承(實現)基類
public class Source implements Sourceable{@Overridepublic void method() {System.out.println("這是方法一");}}
步驟三:定義一個裝飾者,(直接或者間接繼承基類)這裡是直接實現了基類,也可以繼承基類的直接子類。
儲存基類的執行個體
public class Decorator implements Sourceable{private Sourceable source;public Decorator(Sourceable source) {super();this.source=source;}@Overridepublic void method() {System.out.println("在前面裝飾一下");source.method();System.out.println("在後面裝飾一下");}public void method2() {System.out.println("在前面裝飾一下");source.method();System.out.println("在後面裝飾一下");}}
步驟四:測試一下(注意調用的方式,要將被裝飾者執行個體傳入裝飾者中)
public class Test { public static void main(String[] args) {Sourceable source=new Source();Sourceable obj=new Decorator(source);obj.method();}}
在IO中的InputStream和OutputStream就是使用了裝飾者模式,這裡我們使用InputStream來簡單記錄下。
被裝飾者 FilterInputStream
-------------------------------------------------------------------------------------------------------------------------------
裝飾者 BufferedInputStream
----------------------------------------------------------------------------------------------------------------------------