关于设计模式的讨论(2)——装饰器模式(Decorator)

    装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式也是属于结构型模式。

    装饰器模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整的前提下,提供了额外的功能。

    动态地给一个对象添加一些额外的指责,新增加一些功能,比生成子类又更为灵活。

    使用的场景一般是扩展一个类的功能或者是动态的增加功能/动态的撤销。基本上可以代替继承。

    

    现在举一个例子:我们首先创建一个Shape的接口以及对这个接口进行圆形和长方形的实现。之后创建一个实现了Shape接口的抽象装饰类ShapeDecorator,并把Shape对象作为它的实例变量。

    RedShapeDecorator是实现的具体类。关于设计模式的讨论(2)——装饰器模式(Decorator)

    关键代码放入的是:


    public abstract class ShapeDecorator implements Shape{

    protected Shape decoratedShape;

    public ShapeDecorator(Shape decoratedShape){

    this.decoratedShape = decoratedShape;

    }

    public void draw(){

        decoratedShape.draw();

       }

   }

   之后再对ShapeDecorator进行实现,可以加入新的功能。对于ShapeDecorator这个类来说,里面就是实现了一个初始的Shape,但是我们可以接着对他进行继承重写,增添新的功能。main函数里创建新对象也是创建继承之后的对象。