装饰者模式是为已有功能动态地添加更多功能的一种方式
动态即可以选择添加或者不添加,如下:可以直接生成主题类,不加其他功能。也可以选择性添加需要的功能。
UML:
可简化:
最简化:
JVAVA:
public class Decorator {
public static void main(String[] args) {
//主体
Component component = new ConcreteComponent();
Decorator1 d1 = new DecoratorA();
Decorator1 d2 = new DecoratorB();
d1.setComponent(component);
d2.setComponent(d1);
d2.Operation();
}
}
abstract class Component{
public abstract void Operation();
}
class ConcreteComponent extends Component{
@Override
public void Operation() {
System.out.println("具体对象的操作");
}
}
abstract class Decorator1 extends Component{
protected Component component;
public void setComponent(Component component) {
this.component = component;
}
@Override
public void Operation() {
if (component == null) return;
component.Operation();
}
}
class DecoratorA extends Decorator1{
@Override
public void Operation() {
super.Operation();
System.out.println("今天上身穿了一件白色衬衫");
}
}
class DecoratorB extends Decorator1{
@Override
public void Operation() {
super.Operation();
System.out.println("今天下身穿了一条黑色半身裙");
}
}
结果:
具体对象的操作
今天上身穿了一件白色衬衫
今天下身穿了一条黑色半身裙