装饰者模式
主要用于给一个对象动态的添加一些额外的职责。Client 可以灵活的组合对象与其功能,对象可扩展,功能可扩展。
修饰者的动态特性
在运行时,修饰者将方法调用传递给被修饰者,如图3所示:
图3 修饰者的动态特性
Decorator 在java io 中的应用
Java的IO是由一些基本的原始流处理器和围绕它们的装饰流处理器所组成的。所谓链接流处理器,就是可以接收另一个(同种类)的流对象作为流源,并对之进行功能扩展的类。可以知道,所谓有链接流就是装饰角色,而原始流就是具体构件角色.一方面,链接流对象接收一个同类型的原始流对象或者另一个同类型的链接流对象作为流源,另一方面,它们都对流源对象的内部工作方法做了相应的改变,这种改变誻装饰模式所要达到的目的,比如:
BufferedInputStream装饰了InputStream的内部工作方式,使得流的读入操作使用缓冲机制,在使用缓冲机制后,不会对每一次的流读入操作都产生一个物理读盘动作,从而提高了程序的效率.
抽象结构图
按照上面的这种原始流处理器和链接流处理器的划分,可以用下面的结构图来描述它们之间的关系。
上面的流处理器图跟装饰模式的结构图有着显而易见的相同之处。实际上InputStream类型的流处理器结构确实符合装饰模式。
装饰模式结构图
对于上图FilterInputStream查看JDK1.4源代码,部分代码如下:
Public class FilterInputStream extends InputStream {
/**
* The input stream to be filtered.
*/
protected InputStream in;
protected FilterInputStream(InputStream in) {
this.in = in;
}
//其它代码
}