您的位置:首页 > Web前端

包装设计模式的实现以改进BufferedReader中的readLine方法为例

2014-09-21 17:12 288 查看
实现与目标对象相同的接口 BufferedReader

定义一个变量记住目标对象

定义一个构造器接收被增强对象

覆盖需要增强的方法

对于不想增强的方法,直接调用目标对象的方法。

package cn.liuning.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;

/*
1.实现与目标对象相同的接口     BufferedReader
2.定义一个变量记住目标对象
3.定义一个构造器接收被增强对象
4.覆盖需要增强的方法
5.对于不想增强的方法,直接调用目标对象的方法。

*/

//继承BufferedReader相当于实现了他的接口,是BufferedReader子类的同时又是BufferedReader的包装类
//覆写他的方法的时候,不采用父类继承的方式,全部调用目标资源的方法,这就成了包装类了。
public class BufferedReaderWrapper extends BufferedReader {

private BufferedReader br;
private int linenum=1;

//通过构造函数接受被增强对象
public BufferedReaderWrapper(BufferedReader in) {
super(in);//显示调用父类的构造函数。使得语法不出错
this.br=in;
}
//覆盖想覆盖的方法就可以了
@Override
public String readLine() throws IOException {
// TODO 自动生成的方法存根
//return super.readLine();原始的是调用父类的readLine();
String line = br.readLine();
if(line == null)
{
return line;
}
return linenum++ +":"+line;
}

//其他方法从父类继承,便实现了对于不想增强的方法,直接调用目标对象的方法。

}

package cn.liuning.demo;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test {

public static void main(String[] args) {
try {
BufferedReader br=new BufferedReader(new FileReader("src/cn/liuning/demo/BufferedReaderWrapper.java"));
BufferedReaderWrapper wrapper = new BufferedReaderWrapper(br);
String line=null;
while((line = wrapper.readLine())!=null)
{
System.out.println(line);
}

} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐