浅谈装饰者模式
一、核心点
1.运行时扩展 要远比 编译时继承 威力大
2.将父类的功能抽象成接口,子类 extends 父类并 implements 功能接口
3.类应对扩展开放,对修改关闭
4.用装饰过的对象代替原有的对象
5.继承有两个作用:继承行为+类型匹配
6.继承是父类的功能传给子类
7.组合:获得的新行为并非是继承【编译】得来,而是由组合对象得来的【运行时才获得】。
二、概念
装饰者模式动态地将责任附加到对象身上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。
装饰者和被装饰者必须是同样的类型【extends】
三、框架
被装饰的抽象组件(Component):父类
继承自抽象组件的具体组件(ConcreteComponent):子类
继承自抽象组件的抽象装饰者(Decorator):装饰父类的抽象类,每个Decorator都 “有一个” Component
具体装饰者(ConcreteDecorator):extends抽象装饰者
四、装饰者模式的缺点
1. 会在设计中加入大量的小类
2.有些代码依赖特定的类型,不可以导入装饰者模式
3. 使用装饰者模式时,实例化组件,有可能实例化很多组件
五、现实中的例子
java I/O