装饰模式

312 阅读1分钟

概念

使用一种对客户端透明的方式动态地扩展对象的功能(继承关系的一种替代方案,比继承更灵活)。通常用于需要动态扩展类功能的场景。

实现方式

  • Component —— 抽象组件,被修饰对象的原始对象
  • ConcreteComponent —— 被修饰对象
  • Decorator —— 抽象装饰类继承抽象组件Component,并持有原始组件的引用。
  • ConcreteDecorator —— 具体装饰类,用于添加新功能。
public abstract class Component {
    public abstract void fun();
}

public class ConcreteComponent extends Component {
    @Override
    public void fun(){
        System.out.println("ok");
    }
}

public abstract class Decorator extends Component {
    private Component component;

    public Decorator(Component c){
        this.component  = c;
    }

    @Override
    public void fun(){
        component.fun();
    }
}

public class ConcretDecorator extends Decorator{
    public ConcretDecorator(Component c){
        super(c);
    }

    @Override
    public void fun(){
        fun1();
        super.fun();
        fun2();
    }

    public void fun1(){
        System.out.println("1");
    }

    public void fun2(){
        System.out.println("2");
    }

}