裝飾模式
- 就是給一個對象增加一些新的功能,并且裝飾的對象的和被裝飾的對象都要實現(xiàn)同一個接口,裝飾者持有被裝飾者的對象的實例。
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;
將裝飾類當(dāng)構(gòu)造傳遞進(jìn)來
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();
}
}
裝飾器模式的應(yīng)用場景:
1、需要擴(kuò)展一個類的功能。
2、動態(tài)的為一個對象增加功能,而且還能動態(tài)撤銷。(繼承不能做到這一點,繼承的功能是靜態(tài)的,不能動態(tài)增刪。)
缺點:產(chǎn)生過多相似的對象,不易排錯!