一、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、装饰者模式可以作为继承的弹性替代方案。继承是在编译期就添加功能,并且改变所有实现类,而装饰者模式是在运行时动态地、透明地给对象新增(移除)功能。