java装饰者模式(扩展BufferedReader的readline()功能)
装饰者模式简介
装饰者模式的构建步骤
- 在装饰类中维护一个被装饰类的引用
- 让装饰类有一个共同的父类或者父接口,目的是形成一个装饰连,让装饰类可以互相装饰
使用装饰者模式扩展BufferedReader的功能
package hhu.marthevin.demo0223;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Demo3 {
public static void main(String[] args) throws IOException{
File file = new File("F:\\Demo7Server.java");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
BufferedReader lineNumReader = new LineNumBufferedReader(bufferedReader);
SemiBufferedReader semiReader = new SemiBufferedReader(lineNumReader);
String line = "";
while((line=semiReader.readLine())!=null)
{
System.out.println(line);
}
}
}
class LineNumBufferedReader extends BufferedReader{
int count = 1;
BufferedReader bufferedReader;
public LineNumBufferedReader(BufferedReader bufferedReader)
{
super(bufferedReader);
this.bufferedReader = bufferedReader;
}
@Override
public String readLine() throws IOException {
String line = bufferedReader.readLine();
if(line==null)
{
return null;
}
line = count+" "+line;
count++;
return line;
}
}
class SemiBufferedReader extends BufferedReader{
BufferedReader bufferedReader;
public SemiBufferedReader(BufferedReader bufferedReader)
{
super(bufferedReader);
this.bufferedReader = bufferedReader;
}
@Override
public String readLine() throws IOException {
String line = bufferedReader.readLine();
if(line==null)
{
return null;
}
return line+";";
}
}