装饰器模式的作用:动态的给对象增加一些职责,即增加其额外的功能。
案例
装饰器模式比较经典的应用就是 JDK 中的 java.io 包下,InputStream、OuputStream、Reader、Writer 及它们的子类。
以 InputStream 为例
如果希望提供一个可以读取文件 + 可缓存的字节流,使用继承方式,就需要派生 FileBufferedInputStream;
如果希望提供一个可以读取文件 + 直接读取基本类型的字节流,使用继承方式,就需要派生 FileDataInputStream。
字节流功能的增强还包括支持管道 pipe、字节数组 bytearray、字节对象 object、字节流字符流的转换 等维度,如果用继承方式,那类的层级与种类会多到爆炸。
为了解决问题,这边就使用了装饰器模式。
InputStream 源码简化
public abstract class InputStream implements Closeable {
public int read(byte b[], int off, int len) throws IOException {}
}
ConstXiong 备案号:苏ICP备16009629号-3