08.装饰模式

2018-03-19  本文已影响0人  0x70e8

装饰模式

1.是什么

装饰模式是以对客户端透明的方式(基于同一个接口)扩展对象的功能,是继承关系的一种替代方案。

2.有什么用

可以动态以插件的方式扩展原有类的功能,且对客户端透明

3.怎么用
public interface IComponent {

    public void dosomeThing();
}
public class BaseComponent implements IComponent {

    @Override
    public void dosomeThing() {
        System.out.println("this is basecomponent method");
    }

}
public abstract class AbstractDecorator implements IComponent {
    private IComponent component;

    public AbstractDecorator(IComponent component) {
        this.setComponent(component);
    }

    /**
     * @return the component
     */
    public IComponent getComponent() {
        return component;
    }

    /**
     * @param component the component to set
     */
    public void setComponent(IComponent component) {
        this.component = component;
    }

}
public class ConcreteDecorator1 extends AbstractDecorator {

    public ConcreteDecorator1(IComponent component) {
        super(component);
    }

    @Override
    public void dosomeThing() {
        System.out.println("This is decorator ConcreteDecorator1 method");
    }

}
public class ConcreteDecorator2 extends AbstractDecorator {

    public ConcreteDecorator2(IComponent component) {
        super(component);
    }

    @Override
    public void dosomeThing() {
        System.out.println("This is decorator ConcreteDecorator2 method");
    }

}

public class Client {

    public static void main(String[] args) {
        IComponent component = new BaseComponent();
        IComponent decorator1 = new ConcreteDecorator1(component);
        component.dosomeThing();
        decorator1.dosomeThing();
        IComponent decorator2 = new ConcreteDecorator2(component);
        decorator2.dosomeThing();
        IComponent decorator3 = new ConcreteDecorator2(decorator1);
        decorator3.dosomeThing();
    }

}
上一篇下一篇

猜你喜欢

热点阅读