java io源之 装饰模式

java io流之 装饰模式

初学java.io的时候容易被众多的IO类搞晕头,其实java.io还是很容易理解的,主要就是通过装饰模式来进行功能的扩充。
扩充基类的功能,一般我们都是通过继承来解决的,但是继承会造成类的膨胀,而使用装饰模式就不会。其实装饰模式就是在扩展类里面搞了个被扩展类的引用而已。
package design.decorator;

/**
 * “装饰模式(Decorator)”又名“包装模式(Wrapper)”,通常用来灵活地扩充对象的功能。
 * 在此之前我们可以通过类的继承来扩充父类的功能,但这种继承方式缺乏灵活性
 * ,并且会导到子类数量的快速膨胀。恰当地使用装饰模式我们会轻松实现在控制子类数量的基础上,灵活地实现对象功能的扩展。装饰模式比类的继承更灵活。
 */
public class Test {
	public static void main(String[] args) {
		FileInputStream in = new FileInputStream(new InputStream());
		in.read();
	}
}

class InputStream {
	public void read() {
		System.out.println("InputStream.read");
	}
}

class FileInputStream extends InputStream {
	protected InputStream in;

	public FileInputStream(InputStream in) {
		super();
		this.in = in;
	}

	public void read() {
		//文件流可以对基本的流进行包装一下
		in.read();
		System.out.println("FileInputStream.read");
	}
}