技术栈

2019-02-27——设计模式 装饰器模式

2019-02-27  本文已影响0人  烟雨乱平生

特点

动态地给对象增加一些职责,即增加其额外的功能。

主要角色

实现

public interface Component {
    void method();
}


public class ConcreateComponent implements Component {
    @Override
    public void method() {

    }
}


public abstract class Decorator implements Component {
    protected Component component;
    Decorator(Component component){
        this.component = component;
    }
}


public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }

    @Override
    public void method() {
        System.out.println("other action");
        this.component.method();
    }
}

装饰器模式看起来和代理模式在代码上没有什么差别,其实代理模式的关注点是对真实对象的隐藏,不会扩展新的功能;而装饰器模式是对具体构件的装饰,并对具体构件进行包装,以扩展新的功能。装饰者能够在运行时递归地被构造

public class ConcreteAfterDecorator extends Decorator {
    public ConcreteAfterDecorator(Component component) {
        super(component);
    }

    @Override
    public void method() {
        this.component.method();
        System.out.println("after");
    }
}


public class ConcreteBeforeDecorator extends Decorator {
    public ConcreteBeforeDecorator(Component component) {
        super(component);
    }

    @Override
    public void method() {
        System.out.println("before");
        this.component.method();
    }
}


public class T {
    public static void main(String[] args) {
        Decorator decorator = new ConcreteAfterDecorator(new ConcreteBeforeDecorator(new ConcreateComponent()));
        decorator.method();
    }
}

在该例中装饰器的构造被层层包装,递归构造。

上一篇下一篇

猜你喜欢

热点阅读