装饰器类和原始类继承同一父类,这样我们可以对原始类“嵌套”多个装饰器。
装饰器类是对原始类的功能的增强。
与代理类结构类似,但设计意图不一样:
代理类附加的是跟原始类无关的功能;装饰器类附加的是跟原始类相关的增强功能。
在不改变原对象的基础上,通过对其进行包装拓展(添加属性或方法),使原有对象可以满足用户更复杂的需求。
在 JS 中装饰链叠加了函数作用域,如果过长会有性能问题。
示例:
下面这样一段代码,我们对 FileInputStream 嵌套了两个装饰器类:BufferedInputStream 和 DataInputStream,让它既支持缓存读取,又支持按照基本数据类型来读取数据。
let InputStream in = new FileInputStream("/user/wangzheng/test.txt");
let InputStream bin = new BufferedInputStream(in);
let DataInputStream din = new DataInputStream(bin);
let data = din.readInt();