定义
允许向一个现有的对象添加新的功能,同时又不改变其结构;
这种模式创建了一个装饰类,用来包装原有的类,并在保持类的完整性的前提下,提供了额外的功能;
类似于AOP面向切面编程,装饰器模式也是一种AOP的实现;
有什么作用
动态地给一个对象添加一些额外的职责。就新增功能来说,装饰器模式相比生成子类更灵活
主要解决问题
通常我们为了扩展一个类习惯使用继承的方式来实现,优于继承为类引入静态特征,并且随着扩展功能的增多子类就越膨胀。
优点
装饰类和被装饰类可以独立发展,不会互相耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点
多层装饰比价复杂。
使用场景
扩展一个类的功能;动态增加功能,动态撤销。
装饰器实现
组合+继承、组合:属于横向,通过构造函数的方式;继承:属于纵向;
延伸
AOP:AOP面向切面编程,解决对象语言的静态问题,能突破类的限制,去动态扩展类的功能,即不破坏封装,又能额外增加功能。
好处:任意扩展功能,聚焦业务逻辑;代码复用,集中管理,方便团队管理