//仅作为学习笔记
/*
装饰设计模式
当想要对已有的对象进行功能增强时
可以定义类 将已有的对象传入 基于已有的功能 并提供加强功能
那么自定义的该类称为装饰类
装饰类通常会通过构造方法接受装饰的对象
并基于被装饰的对象的功能 提供更强的功能
装饰设计模式与继承的区别
与装饰设计模式相比较 继承的类扩展性很差
装饰设计模式通过多态的形式,提高了扩展性。
装饰模式比继承要灵活 避免了继承体系的臃肿
而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能
所以装饰类和被装饰类通常都属于一个体系中
*/
import java.io.*;
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r = r;
}
//可以一次读取一行数据的方法
public String myReadLine() throws IOException
{
//定义一个临时容器 原BufferReader 封装的是字符数组
//为了演示方便 定义一个StringBuilder容器 因为最终还是要将数据变成字符串
StringBuilder sb = new StringBuilder();
int ch = 0;
while( (ch = r.read())!= -1)
{
if(ch == '\r')
continue;
if(ch == '\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!= 0)
return sb.toString();
return null;
}
public void myClose() throws IOException
{
r.close();
}
}
class MyBufferedReaderDemo
{
public static void main(String []args) throws IOException
{
FileReader fr = new FileReader("Test.java");
MyBufferedReader myBuf = new MyBufferedReader(fr);
String line = null;
while( (line = myBuf.myReadLine())!=null)
{
System.out.println(line);
}
myBuf.myClose();
}
}