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

java IO源之装饰者

2012-09-13 
java IO流之装饰者我们知道在java整个IO流的API设计中大量采用了装饰者模式进行设计。而装饰者模式最主要的

java IO流之装饰者
我们知道在java整个IO流的API设计中大量采用了装饰者模式进行设计。而装饰者模式最主要的特征是可以创建自己装饰者的装饰者,因此我们可以利用IO流中采用了装饰者这个特征根据需求去扩展自己的IO流。

例如现在有这样一个需求:读取一个文件里面的内容,将文件里的内容所有的小写字母都转换成大写的。这个时候我们就可以通过去扩展IO流去做。

package com.unis.io;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FilterReader;import java.io.IOException;import java.io.Reader;public class UppCaseReader extends FilterReader {public UppCaseReader(Reader in) {super(in);}@Overridepublic int read(char[] cbuf, int off, int len) throws IOException {int result = super.read(cbuf, off, len); for(int i=off;i<len;i++){if(cbuf[i]>='a'&&cbuf[i]<='z'){cbuf[i] -= 32;}}return result;}//@Override//public int read() throws IOException {//int result = super.read();//if(result>='a'&&result<='z'){//result-=32;//}//return result;//}public static void main(String[] args) throws IOException {Reader reader = new BufferedReader(new UppCaseReader(new FileReader(new File("src/com/unis/io/UppCaseReader.java"))));int i =0;while((i=reader.read())!=-1){System.out.print((char)i);}}}


注:1.在这个类中我们也可以直接继承Reader这个类,但是如果继承Reader类除了要复写read方法(带三个参数的),我们还要复写colse方法。

2.另外在这个类中为什么我们要复写read方法(带三个参数的),而不复写不带参数的read方法呢。这是因为Reader类中所有的read方法到最后都是去调用带三个参数的read方法去实现的,所以我们只用去实现三个参数的read方法即可。

3.在构造方法中传入的reader才是真的reader.

热点排行