装饰模式

  1. 抽象一个Component类(或接口)。
  2. 添加一个ConcreteComponent类(具体被装饰者),实现Component。
  3. 抽象一个Decorator装饰者类,继承实现Component类,并持有一个被装饰者的引用。
  4. 实现装饰操作类并传入被装饰者。
// 步骤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 对你进行了操作

你可能感兴趣的:(装饰模式)