A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王_强 中级黑马   /  2013-3-29 09:53  /  1555 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class MyBufferedReader extends Reader {  
           Reader r = null;  
           //使用接口Reader,使用多态特性
           MyBufferedReader(Reader r){   
                this.r = r;  
            }  
            //定义读取一行的方法  
         public String  myReadLine()throws IOException{           
               //定义一个StringBuilder对象,存放一行的数据  
             StringBuilder sb = new StringBuilder();  
                 int ch = 0;  
                
                 //读取字符
           while((ch = r.read())!=-1){  
                   if(ch == '\r')  
                        continue;  
                   //判断是否换行了,换行就返回这行的数据sb,没有没有换行,就继续添加
           if(ch == '\n')      
                        return sb.toString();  
                    else  
                        sb.append((char)ch);  
               }                        
                
        if(sb.length()!=0)  //由于上面只有读取到一行的结束标识,才返回,所以对于最后一行不是整行的数据进行获取,以免丢失   
                       return sb.toString();  
              return null;    //读到文件结尾,返回null   
            }     
            @Override  //实现Reader的抽象方法
            public int read(char[] cbuf, int off, int len) throws IOException {  
        return r.read(cbuf,off,len);  
    }  
      //关闭流资源
            public void close() throws IOException {  
               r.close();  
           }  
           public void myClose() throws IOException{         
          r.close();      
           }  
        }  
这是毕老师上课讲的装饰模式的一个类,为什么这里要继承Reader呢,装饰类不是说避免继承的吗?

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

2 个回复

倒序浏览
装饰模式比继承要灵活。避免了继承体系臃肿。
而且降低了类于类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 VOIDMAIN 于 2013-3-29 17:57 编辑

读取流的父类就是reader,不管是字节流还是字符流,读都是通过read方法实现的,而你这个例子是模拟字符缓冲流,所以必须要继承reader中的read方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马