包装设计模式的实现以改进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(); } } }
相关文章推荐
- 【装饰设计模式】写一个MyBufferedReader实现自己的ReadLine方法、增强BufferedReader的ReaderLine()
- IO流-2.【字符流缓冲区BufferedWriter/BufferedReader】【readLine()方法】【装饰设计模式】【LineNumberReader】
- 黑马程序员_java对BufferedReader中readLine在拷贝文件时存在的问题的与改进方法。
- BufferedReader.readLine()方法是如何实现的
- J2SE中 装饰设计模式之用自定义类去实现BufferedReader类的功能
- day19字符流的缓冲区。自己MyBufferReader的readLine方法。装饰设计模式。字节流。自定义一个缓冲区模拟BufferedInputStream。读取键盘
- [设计模式]_[中级]_[模板方法C++例子实现举例]
- 《模式——工程化实现及扩展》(设计模式C# 版)《模板方法模式 Template》——“自我检验" 参考答案
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 装饰模式——自己实现一个BufferedReader
- 设计模式C++实现(5)——原型模式、模板方法模式
- js如何实现设计模式中的模板方法
- 设计模式实践-反射到所有接口实现类实践工厂方法,页面中有大量计算数据时设计实践
- 我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)
- 设计模式之实现---模版方法模式
- Head First 设计模式 (八) 模版方法模式(Template method pattern) C++实现
- BufferedReader中的readLine()方法与换行符
- 设计模式之—简单工厂方法(StaticFactory )-Java实现
- 银行业务调度系统_改进 与 模板方法设计模式 共享设计模式