包装设计模式的实现以改进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();
        }

    }

}
时间: 2025-01-01 20:10:14

包装设计模式的实现以改进BufferedReader中的readLine方法为例的相关文章

C#控制台基础 streamreader 中的readline方法读取指定txt文件的所有行

1.代码 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication4 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 {

C#控制台基础 streamreader 中的readline方法读取指定txt文件的第一行

1.代码 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication4 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 {

java中readLine()方法为什么有的行读不到?

今天在使用java对IO操作时,readLine()输出到控制台的行少了很多.后来发现readLine()实际上是一次读取一行.如果我们不话readLine()读取的行内容赋给一个字符串的话,每直接调用一次readLine()方法,实际上就是往下读一行.最后你会发现它变成了隔行读取. 下面两段代码中.直接system.out.println(br.readLine()),实际上就是输出的while循环后的下一行.当我们将readLine()的结果赋值给一个变量是,输出的是变量的内容而没有再次调用

[javaweb]Java过滤器与包装设计模式的实用案例.

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 在阎宏博士的<JAVA与模式>一书中开头是这样

【设计模式】状态模式 改进后的

1.简单谈谈 状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类. 状态模式要解决的问题是:当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化. 优点:简化了一个对象的状态转换和行为改变的代码,把这部分代码放在了[状态类]中,需要注意的一点是:在[状态类]中,每个不同的[状态值]也许会被“串起来”成为一条链,这样就能保证设置不同的“离散的”[状态值]时,可以在“链上”有有个对应的处理(行为).

改进cocos2dx中lua读ccb的方法

cocos2dx自带的CCBProxy真弱,还好提供了一个CCBReaderLoader.lua,但是也不好用, 于是修改了一下CCBReaderLoader,下面直接贴代码了. function NewCCBuilderReaderLoad(strFilePath,proxy,owner) if nil == proxy then return end --print("ccbnew") local ccbReader = proxy:createCCBReader() local

设计模式,Let&#39;s “Go”! (中)

* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif; font-size: 15px } p { line-height: 25.6px; text-align: justify; margin: 23.7px 0 } blockquote { b

包装设计模式

包装设计模式过程 1. 实现与被增强对象同样的接口(或继承被增强对象) 2. 定义一个变量记住被增强对象 3. 定义一个构造器.接受被增强对象 4. 覆盖须要增强的方法 5. 对不须要增强的方法,直接调用被增强对象的方法.

《Android源码设计模式解析》读书笔记——Android中你应该知道的设计模式

断断续续的,<Android源码设计模式解析>也看了一遍,书中提到了很多的设计模式,但是有部分在开发中见到的几率很小,所以掌握不了也没有太大影响. 我觉得这本书的最大价值有两点,一个是从设计模式的角度去理解Android源码,结合着日常开发中的常用类,对设计模式的理解会更加的深刻:另外一个好处就是了解常用模式,再看其他人写的代码的时候,更容易理解代码思路.下面是我的读书笔记和一些思考,设计模式只整理我认为重要的部分. 建造者模式 建造者模式最明显的标志就是Build类,而在Android中最常