核心思想
装饰模式就是给一个对象动态的增加一些新的功能,
装饰对象和被装饰对象实现同一个接口,
装饰对象持有被装饰对象的实例。
UML图
//定义接口 public interface Sourceable { 2. public void method(); 3.} //被装饰者实现接口 1.public class Source implements Sourceable { 2. 3. @Override 4. public void method() { 5. System.out.println("the original method!"); 6. } 7.} //装饰者实现接口,并持有被装饰者的实例 1.public class Decorator implements Sourceable { 2. 3. private Sourceable source; 4. 5. public Decorator(Sourceable source){ 6. super(); 7. this.source = source; 8. } 9. @Override 10. public void method() { 11. System.out.println("before decorator!"); 12. source.method(); 13. System.out.println("after decorator!"); 14. } 15.} //测试类: 1.public class DecoratorTest { 2. 3. public static void main(String[] args) { 4. Sourceable source = new Source(); 5. Sourceable obj = new Decorator(source); 6. obj.method(); 7. } 8.} 输出: before decorator! the original method! after decorator!
小结
应用场景:
1、需要扩展一个类的功能时使用。
2、动态的为一个对象增加功能,而且还能动态撤销。
(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
缺点:
产生过多相似的对象,不易排错!
this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。类加载完毕,创建对象,父类的构造方法会被调用(默认自动无参),然后执行子类相应构造创建了一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部。this super只能在有对象的前提下使用,不能在静态上下文使用。