设计模式:装饰模式

来源:互联网 发布:2017公安部网络严打 编辑:程序博客网 时间:2024/06/09 05:42
/*自己写的读取行*/import java.io.*;/*装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入。基于已有的功能,并提供加强功能。那么定义的该类称为装饰类。如下面的:MyBufferedReader 对  FileReader 类的 read 方法进行了功能加强。装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。 */class  MyBufferedReader{private FileReader r;MyBufferedReader(FileReader r){thir.r = r;}//一次读一行数据public String getLine(FileReader fr)throws IOException{//定义一个临时的容器,原bufferedReader封装的是字符数组//为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串。StringBuilder sb = new StringBuilder();int ch = 0;while((ch = r.read()) != -1){//读到 \r 并且下个是 \n 时才返回。 这样如果只是读到 \r 就忽略是不是会有误差if(ch =='\r') //读到 \r 时呼略过continue;if(ch == '\n') //return sb.toString();elsesb.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("buf.txt");MyBufferedReader mybuf = new MyBufferedReader(fr);String line = null;while((line = mybuf.myReadLine()) !=null){System.out.println(line);}mybuf.myClose();}}

0 0