java io源之 装饰模式
java io流之 装饰模式
初学java.io的时候容易被众多的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"); } }