装饰模式

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更为灵活。

  • 通常是继承关系的替代方案。
  • 常用于动态的增加对象的功能。

通用类图

组件含义

Component: 抽象的,需要被修饰的核心类。
ConcreteComponent: 被修饰的类的具体实现。
Decorator: 抽象的,包含指向Component构件的私有变量。
ConcreteComponent: 装饰类的具体实现。

demo

abstract class Component {
    public abstract void operate();
}

class ConcreateComponent extends Component {
    @Override
    public void operate() {
        System.out.println("do something");
    }
}

abstract class Decorator extends Component {
    private Component component = null;

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

    @Override
    public void operate() {
        this.component.operate();
    }
}

class ConcreteDecorator1 extends Decorator {
    public ConcreteDecorator1(Component component) {
        super(component);
    }

    private void method1() {
        System.out.println("method 1 decorate");
    }

    public void operate() {
        this.method1();
        super.operate();
    }
}

class ConcreteDecorator2 extends Decorator {
    public ConcreteDecorator2(Component component) {
        super(component);
    }

    private void method2() {
        System.out.println("method 2 decorate");
    }

    public void operate() {
        this.method2();
        super.operate();
    }
}

public class Client {
    public static void main(String[] args) {
        Component component = new ConcreateComponent();
        component = new ConcreteDecorator1(component);
        component = new ConcreteDecorator2(component);
        component.operate();
    }
}

结果

版权声明:本文为dwtw原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dwtw/p/11899295.html