装饰模式
什么是装饰模式
动态地给一个对象增加一些额外的职责,就拓展对象功能来说,装饰模式比生成子类的方式更为灵活
设计思想
程序中,我们希望动态地给一个类增加额外的功能,而不改动原有的代码,就可用装饰模式进行扩展
设计要点
- 可灵活地给一个对象增加职责或拓展功能
- 可增加任意多个装饰
- 装饰地顺序不同,可能产生不同的效果
优缺点
优点:
- 使用装饰模式来实现扩展比使用继承更加灵活,可以在不创造更多子类地情况下,将对象的功能加以扩展
- 可以动态地给一个对象附加更多功能
- 可以用不同的装饰器进行多重装饰,装饰地顺序不同,可能产生不同地效果
- 装饰类和被装饰类可以独立发展,不回互相耦合;装饰模式相当于继承地一个替代模式
缺点:
与继承相比,用装饰地方式拓展功能容易出错,排错也更困难。对于多次装饰地对象,调试寻找错误时可能需要逐级排查,较为烦琐
应用场景
- 有大量地独立地扩展,为支持每一种组合将产生大量地子类,使得子类数目呈爆炸性增长时
- 需要动态地增加或撤销功能时
- 不能采用生成子类地方法进行扩充时,类的定义不能用于生成子类