装饰模式类图:
在装饰模式中的各个角色有:
(1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
(2)具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
(3)装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
(4)具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。
代码
Component.java
public interface Component {
public void Operation();
}
ConcreteComponent.java
public class ConcreteComponent implements Component {
@Override
public void Operation() {
System.out.println("Tom");
}
}
Decorator.java
public class Decorator implements Component {
protected Component component;
public void setComponent(Component component){
this.component=component;
}
//重写Operation方法
@Override
public void Operation() {
if(component!=null)
component.Operation();
}
}
ConcreteDecorator.java
继承Decorator,增加装饰
public class ConcreteDecorator extends Decorator {
private String addThing="is beautiful";
@Override
public void Operation(){
super.Operation();
System.out.print(addThing);
}
}
Main.java
public class Main {
public static void main(String args[]){
Component component=new ConcreteComponent();
Decorator decorator=new ConcreteDecorator();
decorator.setComponent(component);
decorator.Operation();
}
}