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

来源:互联网 发布:电脑网络连接不上651 编辑:程序博客网 时间:2024/05/13 15:41
<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(); }} 

0 0
原创粉丝点击