您的位置:首页 > 编程语言 > Java开发

JAVA基础 day20 装饰模式 自己实现LineNumberReader类

2016-10-20 14:36 387 查看
装饰设计模式

当想要对已有对象进行功能增强时,可以自定义类,将已有对象传入,基于已有的功能,进行增强,自定义的类就叫做装饰类。

装饰类通常会通过构造方法来接受已有的被装饰的对象,并基于被装饰类的功能,提供更强的功能。

LineNumberReader 类:提供了行号的设置和获取方法。是BufferedReader的子类

import java.io.*;
class LineNumberReaderDemo
{
public static void main(String[]args)throws IOException
{
FileReader fr=new FileReader("buff.txt");
LineNumberReader lnr=new LineNumberReader(fr);
FileWriter fw=new FileWriter("buff_lineCopy.txt");
BufferedWriter bfw=new BufferedWriter(fw);
String s=" ";
while((s=lnr.readLine())!=null)
{
bfw.write(lnr.getLineNumber()+s);
bfw.newLine();
}
lnr.close();
bfw.close();
}
}


自己实现LineNumberReader中的设置行号方法和获取行号方法

import java.io.*;
class MyLineNumberReader
{
private FileReader fr;
private int  lineNumber=0;
MyLineNumberReader(FileReader fr)
{
this.fr=fr;
}
public String myReadLine()throws IOException
{
lineNumber++;//每读一行就加1
StringBuilder sb=new StringBuilder();
int num=0;
while((num=fr.read())!=-1)
{
if(num=='\r')
continue;
if(num=='\n')
return sb.toString();
sb.append((char)num);
}
return null;
}
public int myGetNumberLine()
{
return lineNumber;
}
public void mySetLIneNumber(int lineNumber)
{
this.lineNumber=lineNumber;
}
}
class  MyLineNumberReaderDemo
{
public static void main(String[]args)throws IOException
{
FileReader fr=new FileReader("buff.txt");
MyLineNumberReader mlnr=new MyLineNumberReader(fr);
String s=" ";
while ((s=mlnr.myReadLine())!=null)
{
System.out.println(mlnr.myGetNumberLine()+s);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java