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();
            }
    
        }
    
    }
  • 相关阅读:
    设计模式之依赖倒置原则
    设计模式之里氏替换原则
    设计模式之单一职责原则
    设计模式六大原则
    spring boot 搭建
    OSI(Open System Interconnect) 网络七层协议
    常用经济术语
    Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查
    Spring Boot入门系列(十四)使用JdbcTemplate操作数据库,配置多数据源!
    Maven快速入门(三)Maven的坐标和仓库
  • 原文地址:https://www.cnblogs.com/liun1994/p/3984735.html
Copyright © 2011-2022 走看看