首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式初探(六)之修饰者

2012-09-05 
设计模式初探(六)之修饰者通过介绍java.io来介绍Decorator。??老的jdk版本中只有面向字节操作的io,大家熟知

设计模式初探(六)之修饰者

通过介绍java.io来介绍Decorator。

?

?

老的jdk版本中只有面向字节操作的io,大家熟知的Stream。面向字节io中的输入类都是继承自InputStream,它是个抽象类,声明了基本的read操作,用于返回io中的字节(其每个子类中的read操作其实都是本地方法实现,用到了native关键字),下面是我从网上down的关于InputStream的基本结构图:

设计形式初探(六)之修饰者

?

所谓修饰是给对象增加额外的职责,但是又不影响其自身的功能,比如在FileInputStream是给一个file对象建立一个输入流,但也仅仅是一个file输入流,没有缓存,没有特殊的读取服务,如果在其上调用read方法:

publicclass FilterInputStream extends InputStream {    /**     * The input stream to be filtered.      */    protected volatile InputStream in;    protected FilterInputStream(InputStream in) {this.in = in;    }    public int read() throws IOException {return in.read();    }

?FilterInputStream称为修饰器,即它可以用来修饰其它的流,增加职能,它有若干个子类用来对每一种职能进行代码实现,FilterInputStream会封装一个它的父类(InpuStream)类型的对象,在构造器中将需要进行修饰的对象(这里是流)赋值给这个封装的对象,并且每一个重写的方法都是委托给这个对象进行,在前后加上需要处理的其它逻辑比如缓存或者是数据压缩,这其实在实际运行的过程中是一个递归的过程,BufferedInputStream中的操作传递给DataInputStream,再传递给FileInputStream,然后从其中跳转出来到DataInputStream中对读取的数据进行格式的判断和选择转换,最后对处理完毕的数据进行byte数组缓存。

?

想到这里,我觉得在数据库连接的实现中也可以考虑用到修饰模式,很不错的模式。

热点排行