首页 > 代码库 > 包装设计模式的实现以改进BufferedReader中的readLine方法为例

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

  • 实现与目标对象相同的接口     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();        }    }}

 

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