标签:style blog color io java ar div sp on
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(); } } }
包装设计模式的实现以改进BufferedReader中的readLine方法为例
标签:style blog color io java ar div sp on
原文地址:http://www.cnblogs.com/liun1994/p/3984735.html