設計模式(結構型模式)——裝飾模式(Decorator)

顧名思義,裝飾模式就是給一個對象增長一些新的功能,並且是動態的,要求裝飾對象和被裝飾對象實現同一個接口,裝飾對象持有被裝飾對象的實例,關係圖以下:java

Source類是被裝飾類,Decorator類是一個裝飾類,能夠爲Source類動態的添加一些功能,代碼以下:ide

public interface Sourceable {  
    public void method();  
}
public class Source implements Sourceable {  
  
    @Override  
    public void method() {  
        System.out.println("the original method!");  
    }  
}
public class Decorator implements Sourceable {  
  
    private Sourceable source;  
      
    public Decorator(Sourceable source){  
        super();  
        this.source = source;  
    }  
    @Override  
    public void method() {  
        System.out.println("before decorator!");  
        source.method();  
        System.out.println("after decorator!");  
    }  
}
public class DecoratorTest {  
  
    public static void main(String[] args) {  
        Sourceable source = new Source();  
        Sourceable obj = new Decorator(source);  
        obj.method();  
    }  
}

輸出:this

before decorator!
the original method!
after decorator!code

裝飾器模式的應用場景:對象

一、須要擴展一個類的功能。繼承

二、動態的爲一個對象增長功能,並且還能動態撤銷。(繼承不能作到這一點,繼承的功能是靜態的,不能動態增刪。)接口

缺點:產生過多類似的對象,不易排錯!class

相關文章
相關標籤/搜索