装饰者模式在 JDK 应用的源码分析
Java 的 IO 结构,FilterInputStream 就是一个装饰者:
public abstract class InputStream implements Closeable{} 是一个抽象类,即Component
public class FilterInputStream extends InputStream { //是一个装饰者类的 Decorator
protected volatile InputStream in //被装饰的对象}
class DataInputStream extends FilterInputStream implements DataInput {} //FilterInputStream 的子类
代码案例:
1 public class Decorator {
2 public static void main(String[] args) throws Exception {
3
4 /**
5 * 说明:
6 * 1、InputStream 是抽象类,类似于前面的 Drink
7 * 2、FileInputStream 是 InputStream 子类,类似于前面的 LongBlack
8 * 3、FilterInputStream 是 InputStream 子类,类似于前面 Decorator 修饰者
9 * 4、DataInputStream 是FilterInputStream 子类,具体的修饰者,类似前面 Milk
10 * 5、FilterInputStream 类有 protected volatile InputStream in; 即含被装饰者
11 * 6、分析得出 JDK 的 IO 体系中,就是使用了装饰者模式
12 */
13 DataInputStream dis = new DataInputStream(new FileInputStream("d:\\abc.txt"));
14 int read = dis.read();
15 System.out.println(read);
16 dis.close();
17 }
18 }