装饰模式

23种创新模式总署
父文链接

不动原对象代码的前提下給原对象增加一些新的功能

产生过多相似的对象,不易排错!

代码

  1. 原对象
public interface Sourceable {  
    public void method();  
}
public class Source implements Sourceable {  
  
    @Override  
    public void method() {  
        System.out.println("the original method!");  
    }  
}
  1. 装饰者
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!");  //添加的功能
    }  
} 
  1. 使用
public class DecoratorTest {  
  
    public static void main(String[] args) {  
        Sourceable source = new Source();  
        Sourceable obj = new Decorator(source);  
        obj.method();  
    }  
} 

装饰器模式的应用场景:

  1. 需要扩展一个类的功能。
  2. 动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

你可能感兴趣的:(装饰模式)