zoukankan      html  css  js  c++  java
  • 包装设计模式的实现以改进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();
            }
    
        }
    
    }
  • 相关阅读:
    HBA登录验证
    html转pdf
    html转pdf
    html转word
    python生成html
    python生成pdf
    Word另存为不同的格式
    WORD转HTML-python第三方包Mammoth(官方文档翻译)
    深入浅谈,CPU设计原理
    CPU,寄存器,缓存,RAM,ROM的作用和他们之间的联系
  • 原文地址:https://www.cnblogs.com/liun1994/p/3984735.html
Copyright © 2011-2022 走看看