装饰模式
一、描述
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
先上一类图:
二、使用场景:
已有一个对象功能可用,但功能较弱,无法满足你的需求,你就可以使用此模式,对这个对象进行动态包装,来符合你的功能需求。
举个例子,有一个抽象类:纸杯,和一个无花纹纸杯。如果现有一个无花纹纸杯(也许是自己生产的,也许是其它系统生产的),但是你想要一个有花纹纸杯,你就可以用此模式动态对该无花纹纸杯进行进一步的包装装饰,得到一个有花纹纸杯。这样的好处是你仅仅只需对无花纹纸杯进行动态包装,而无需去实现无花纹纸杯的功能。
这里有花纹纸杯就相当于一个装饰器了。
三、实现(伪代码):
无花纹纸杯 无花纹纸杯 = new 无花纹纸杯();
木纹花纹纸杯 木纹花纹纸杯 = new 木纹花纹纸杯();
木纹花纹纸杯.装饰(无花纹纸杯);
鱼尾纹花纹纸杯 鱼尾纹花纹纸杯 = new 鱼尾纹花纹纸杯();
鱼尾纹花纹纸杯.装饰(无花纹纸杯);