包装设计模式的实现以改进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 ...
随机推荐
- sgu 185 最短路建网络流
题目:给出一个图,从图中找出两条最短路,使得边不重复. 分析:既然是最短路,那么,两条路径上的所有节点的入边(s,x).出边(x,e)必定是最优的,即 dis[x] = dis[s]+edge_dis ...
- selenium遍历控件集合
场景:需要重复增加地址栏信息,如果地址信息超过了5个就不开始增加 如图: 1.找到控件集合,在遍历每个子元素,在进行选择 1.先找到最外层的div的控件集合 2.外层的css定位为: int star ...
- 201509020-js
JS 关于(function( window, undefined ) {})(window)写法的理解 JS 关于(function( window, undefined ) {})(windo ...
- Linux常用命令英文全称与中文解释Linux系统
Linux常用命令英文全称与中文解释Linux系统(转) Linux常用命令英文全称与中文解释Linux系统 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Pri ...
- MySQL之不能保存表格问题
有时候我们制作表格不能保存时出现这样的提示: 我们打开工具: 把“阻止保存要求重新创建表的更改”选项的勾给去了:
- IOS添加控件
YJQApp *appInfo =self.apps[i]; //.添加图片 UIImageView * iconView = [[UIImageView alloc]init]; CGFloat i ...
- ubuntu将默认中文改成英文
找到/etc/default/locale下面的文件,使用vim打开 将看到内容为: LANG=”zh_CN.UTF-8″ LANGUAGE=”zh_CN:zh” 改为 LANG=”en_US.UTF ...
- js如何检测打开窗口是否存在的三个方法?
js打开窗口一般也就是使用window.open方法: win = window.open(CHILD_WINDOW_URL, CHILD_WINDOW_NAME, CHILD_WINDOW_ATTR ...
- python基础:day3作业
修改haproxy配置文件 基本功能:1.获取记录2.添加记录3.删除记录 代码结构:三个函数一个主函数 知识点:1.python简单数据结构的使用:列表.字典等 2.python两个模块的使用:os ...
- 利用CSS3打造一组质感细腻丝滑的按钮
CSS3引入了众多供功能强大的新特性,让设计和开发人员能够轻松的创作出各种精美的界面效果.下面这些发出闪亮光泽的按钮,漂亮吧?把鼠标悬停在按钮上,还有动感的光泽移动效果. 温馨提示:为保证最佳的效果, ...