设计模式之装饰者模式(二)

一、UML类图和时序图
在这里插入图片描述
二、实例说明

public interface Windows {

    void draw();
}
public class SimpleWindows implements Windows {

    @Override
    public void draw() {
        //Draw window
    }

    public static void main(String[] args) {
        Windows windows = new VerticalScrollDecorator(new HorizontalScrollDecorator(new SimpleWindows()));
        windows.draw();
    }
}

public abstract class WindowsDecorator implements Windows {

    private Windows windowsDecorator;

    public WindowsDecorator(Windows windowsDecorator) {
        this.windowsDecorator = windowsDecorator;
    }

    public void draw() {
        windowsDecorator.draw();
    }
}

public class VerticalScrollDecorator extends WindowsDecorator {

    public VerticalScrollDecorator(Windows windowsDecorator) {
        super(windowsDecorator);
    }

    @Override
    public void draw() {
        super.draw();
        verticalScroll();
    }

    private void verticalScroll() {
        System.out.println( "垂直滚动");
    }
}
public class HorizontalScrollDecorator extends WindowsDecorator {
    public HorizontalScrollDecorator(Windows windowsDecorator) {
        super(windowsDecorator);
    }

    @Override
    public void draw() {
        super.draw();
        horizontalScroll();
    }

    private void horizontalScroll() {
        System.out.println("水平滚动");
    }
}

三、使用注意事项
1、装饰者模式可以作为继承的弹性替代方案。继承是在编译期就添加功能,并且改变所有实现类,而装饰者模式是在运行时动态地、透明地给对象新增(移除)功能。

猜你喜欢

转载自blog.csdn.net/wuweiwoshishei/article/details/88637518