装饰器模式的主要作用是允许向一个现有对象添加新的功能,同时又不改变其结构。相当于对先有对象装饰了一下。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法完整性的前提下,提供了额外的功能。
包装完再进行相应的拓展。对于下面这个UML图,我想对Shape的实例进行拓展,那么我就用ShapeDecorator包装Shape。比如说我原先有一个Circle,我想对Circle进行扩展,原先有的东西肯定想用,那继承就不是一个好办法。那么我就用具体类继承ShapeDecorator来拓展,然后创建的时候将Circle当做参数传入,这里相当于又用了委托。