初学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");
}
}