黑马程序员_日记(一)_java基础_装饰设计模式思想

------- android培训java培训、期待与您交流! ----------
 
  
今天看了黑马黑马基础毕老师的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();
 }
}

 

你可能感兴趣的:(java)