- 抽象一个Component类(或接口)。
- 添加一个ConcreteComponent类(具体被装饰者),实现Component。
- 抽象一个Decorator装饰者类,继承实现Component类,并持有一个被装饰者的引用。
- 实现装饰操作类并传入被装饰者。
// 步骤1 抽象一个Component类
public abstract class Component{
public void dress();
}
// 步骤2 添加一个ConcreteComponent类(具体被装饰者),实现Component
public class PersonConcreteComponent extends Component{
@Override
public void dress() {
System.out.println("装饰者:我自己的操作");
}
}
// 步骤3 抽象一个Decorator装饰者类,继承实现Component类,并持有一个被装饰者的引用。
public abstract class Decorator extends Component{
private Component component;
public Decorator(Component component){
this.component = component;
}
@Override
public void dress() {
component.dress();
}
}
// 步骤 4 实现装饰操作类并传入被装饰者。
public class ConcreteDecoratorA extends Decorator{
public ConcreteDecoratorA(Component component){
super(component);
}
@Override
public void dress() {
operation();
super.dress();
operation();
}
private void operation(){
System.out.println("装饰者A 对你进行了操作");
}
}
// 调用实现
public class Client {
public static void main(String[] args){
Component person = new PersonConcreteComponent();
ConcreteDecoratorA a = new ConcreteDecoratorA(person);
ConcreteDecoratorB b = new ConcreteDecoratorB(person);
a.dress();
b.dress();
}
}
输出:
装饰者A 对你进行了操作
装饰者:我自己的操作
装饰者A 对你进行了操作
装饰者B 对你进行了操作
装饰者:我自己的操作
装饰者B 对你进行了操作