<pre name="code" class="html">------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
今天看了黑马黑马基础毕老师的IO,其中的装饰设计模式让我印象很深刻,所以就写一下自己的理解,加深一下对它的认识。装饰设计模式,无非就是在原有已存在的方法的基础上来增强它的功能,比如说read方法和readline方法,把一个一个的读改为一行一行的读。装饰设计模式跟继承是不一样的,装饰设计模式可以使复杂的东西简单化,装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。继承是对方法的扩展,而装饰设计模式是对方法功能的增强。就像去面试一样,打扮一下西装革履,这就叫装饰。
以下是关于io流的装饰设计模式的例子:
/*明白了BUfferedReader类中特有的方法readLine的原理后,
可以自定义一个类中包含一个功能和readLine一致的方法
来模拟一下BufferedReader
*/
import java.io.*;
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r=r;
}
//可以一次读一行的数据方法
public String myReadLine() throws IOException
{
//定义一个临时容器,原BufferedReader封装的是字符数组
//定义一个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("buf.txt");
MyBufferedReader myBuf=new MyBufferedReader(fr);
String line=null;
while((line=myBuf.myReadLine())!=null)
{
System.out.print(line+" ");
}
myBuf.myClose();
}
}