1、意图
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式比生成子类更为灵活。
2、类图
3、说明
装饰模式是给对象增加功能,而不是给整个类增加功能。比如说,你有一个TextView的类,你想给其中的一个TextView的对象(即实例)加一个滚动条,这时候需要一个滚动条的装饰类,来装饰这个对象。而你想给另一个TextView的对象加一个黑边框,这时候需要一个黑边框的装饰类,类装饰这个对象。
装饰类客可以组合嵌套。例如,你可以给一个TextView增加一个黑边框和滚动条,只需要组合使用滚动条的装饰类和黑边框的装饰类。这样有一个好处,就是当你需要多种组合的装饰时,使用装饰模式比使用继承,可以减少很多子类。比如,同样需要黑边框的TextView和滚动条的TextView和黑边框加滚动条的TextView,如果使用继承,就至少需要三个TextView 的子类。而使用装饰模式,只需要更少的类。当然,还有更多的组合可以装饰,如果说,两个黑边框的TextView,只需要嵌套使用两次黑边框的装饰类即可。
总之,装饰模式强调的是给对象增加功能。 对象-------增加功能。