装饰模式总结

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

装饰模式总结

“Component 是定义一个对象接口,可以给这个对象动态地添加职责,ConcreteComponent是定义一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,无需知道Decorator的存在的。至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能”

——《大话设计模式》程杰

示例代码:

装饰模式总结

装饰模式总结

Component是接口类,定义了装饰类的执行方法

ConcreteComponent实现了Component接口,一般是作为主类,包含核心功能,需要被装饰,在核心功能不是非常复杂的情况况下可以把ConcreteComponent和Component合并成一个类。

Decorator类实现了Component接口,添加了Component类型的字段和设置这个字段的方法,所有的装饰类都需要继承这个类

用SetComponent方法来对对象进行包装。这样每个装饰对象的实现就和如何使用这个装饰对象分开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。

ConcreteDecorator是具体的装饰类

(注意:被当作SetComponent的参数的Component子类对象是被装饰的对象,可以想象成一个礼物被包装纸一层一层地包裹)

适用性:

1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责(可以在任何时候为主类添加新的、装饰功能,不用编辑主类,不会对主类的核心功能产设影响)。

2、处理那些可以撤销的职责(移除装饰功能不会影响核心功能)。

3、当不能采用生成子类的方法进行扩充时。

特点:可以代替继承

缺点:多层装饰比较复杂