包装设计模式的实现以改进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=; //通过构造函数接受被增强对象
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方法为例的更多相关文章
- BufferedReader 中的 readLine()
BufferedReader中的readLine()方法,API解释如下: Reads a line of text. A line is considered to be terminated by ...
- java中readLine()方法为什么有的行读不到?
今天在使用java对IO操作时,readLine()输出到控制台的行少了很多.后来发现readLine()实际上是一次读取一行.如果我们不话readLine()读取的行内容赋给一个字符串的话,每直接调 ...
- PHP如何知道一个类中所有的方法
当我们使用一个类时既没有源码也没有文档时(尤其是php扩展提供的类,比如mysqli,Redis类),我们该怎么知道这个类中提供了哪些方法,以及每个方法该怎么使用呢,此时就该PHP中强大的反射登场了, ...
- [javaweb]Java过滤器与包装设计模式的实用案例.
在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...
- 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查
原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...
- (惊艳)基于谷底最小值的阈值的图像分割(改进HSV中的H分量可以用imhist(H)提取)
任务概述:将这张图片作为输入 , 然后抠出只有斑点的图片 灵感来源: 1. 黄色部分用绿色的掩盖掉得到图片B,然后A和B进行∩运算,相同的设置为0 2.统计单词的子母数,开辟一个26个元素的数组,进来 ...
- SharePoint 2013 报:网站在改进过程中处于只读状态,对此给您带来的不便,我们深表歉意
SharePoint 2013备份过程意外中断,导致再打开站点报:网站在改进过程中处于只读状态,对此给您带来的不便,我们深表歉意 英文:We apologize for any inconvenien ...
- Java中的BufferedReader 的readLine方法
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...
- 设计模式,Let's “Go”! (中)
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
随机推荐
- 转: 关于 ssl的建立链接的过程
转自: http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互 ...
- ios深拷贝,浅拷贝,拷贝自定义对象的简单介绍(转)
copy语法的目的:改变副本的时候,不会影响到源对象: 深拷贝:内容拷贝,会产生新的对象.新对象计数器置为1,源对象计数器不变. 浅拷贝:指针拷贝,不会产生新的对象.源对象计数器+1. 拷贝有下面两个 ...
- ASP.NET 状态的传递和保存
1,HTTP协议是无状态的.服务器不会记住上次给浏览器的处理结果,如果需要上次处理结果(上次状态)就需要浏览器把处理结果值(上次状态)再次给服务器. 2,URL传值:通过URL参数或者通过Form表单 ...
- html5+css3第一屏滚屏动画效果
详细内容请点击 在线预览立即下载 html5+css3第一屏滚屏动画效果. 转载自:http://tympanus.net/codrops/2014/05/22/inspiration-for-art ...
- CSS3--幽灵按钮特效(实例)
先预览效果 其中用到了CSS3的Transition属性:设置动画时间.效果:Transform属性:设置元素旋转.位移:box-sizing属性:以特定的方式定义某个区域的特定元素: 制作小三角方法 ...
- vs2013发布时: sgen.exe 已退出 代码为 1
出现这个错的时候,有查网上的.自己也亲试了一下,注意两个地方就行. 红色框里设成这样的值就OK了!
- 为什么用服务不用线程-Android
1.什么是Service? A Service is an application component representing either an application's desire to p ...
- Programmer's Jokes
1. 一天, 下着小雨, 和同事们一起去上班,一位同事差点滑倒,另一位同事笑话说:如果人走路用爬的就不会摔倒了! 遂反问他:能用两行代码搞定的事情为什么要用4行呢? 2. 有趣的公式( Fr ...
- DWZ 验证 CLASS 规则
验证:格式 class="XXXX" 即可验证. required: "必填字段", remote: "请修正该字段", email ...
- text-overflow:ellipsis; 使用
ul li{ height:25px; line-height:25px; width:200px; overflow:hidden; white-space:nowrap;-moz-text-ove ...