装饰模式(Decorator)

装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更具有弹性的替代方案。关系图如下:

代码如下:

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 Test {

    public static void main(String[] args) {
        Sourceable source = new Source();  
        Sourceable obj = new Decorator(source);  
        obj.method(); 
    }

}

结果:

before decorator!
the original method!
after decorator!

 

此模式的应用场景:

1、需要扩展一个类的功能;

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

缺点:产生过多相似的对象,不易排错。

posted @ 2015-07-08 14:18  蜉蝣朝生而暮死  阅读(103)  评论(0编辑  收藏  举报