Java中设计模式——装饰类(传智播客毕老师视频讲解)
来源:互联网 发布:淘宝借贷逾期 编辑:程序博客网 时间:2024/04/27 02:19
装饰类设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能,则此自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强大的功能。如BufferedReader就是这种装饰类,以前的FileReader读文件,但BufferedReader类提供了更强大的一次读一行的readLine()方法。
同继承相比:装饰类模式灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系。
装饰类因为增强已有的对象,具备的功能和已有的是相同的,只不过提供了更强功能,所以装饰类和被装饰类通常都是属于一个体系的。
练习1:做一个类似于BufferedReader的包装类,有readLine()方法
import java.io.*;public class MyBufferedReader {private Reader r;MyBufferedReader(Reader r){this.r=r;}public String MyReadLine() throws Exception{StringBuilder s=new StringBuilder();int c;while((c=r.read())!=-1){if(c=='\r')continue;if(c=='\n')return s.toString();s.append((char)c);}if(s.length()!=0)return s.toString();return null;}public void close() throws Exception{r.close();}}
练习2:做一个类似于LineNumberReader的包装类,可以统计行数,
import java.io.*;public class MyLineNumberReader extends MyBufferedReader{private int LineNumber;MyLineNumberReader(Reader r){super(r); //调用父类的构造函数}public void setLineNumber(int n){//设置起始行号LineNumber=n;}public int getLineNumber(){return LineNumber;}public String MyReadLine() throws Exception{LineNumber++; //每读一行,行号增一return super.MyReadLine(); //直接调用父类方法即可}}public class BufferedReaderDemo {public static void main(String[] args) throws Exception{FileReader r=new FileReader("abc.txt");MyLineNumberReader bufr=new MyLineNumberReader(r);String s1;bufr.setLineNumber(100);while((s1=bufr.MyReadLine())!=null) //当读到null时,表示读到文件的末尾处System.out.println(bufr.getLineNumber()+":"+" "+s1);bufr.close();}}结果如下:
0 0
- Java中设计模式——装饰类(传智播客毕老师视频讲解)
- Java中String类(传智播客毕老师视频讲解)
- Java中System类(传智播客毕老师视频讲解)
- Java中Runtime类(传智播客毕老师视频讲解)
- Java中Collection子接口(1)——List接口(传智播客毕老师视频讲解)
- Java中Collection子接口(2)——Set接口(传智播客毕老师视频讲解)
- Java中IO流(1)——IO流概述(传智播客毕老师视频讲解)
- Java中IO流(2)——字符流(传智播客毕老师视频讲解)
- Java中IO流(3)——字符流缓冲区(传智播客毕老师视频讲解)
- Java中IO流(4)——字节流(传智播客毕老师视频讲解)
- Java中IO流(5)——字节流缓冲区(传智播客毕老师视频讲解)
- Java中StringBuffer与StringBuilder(传智播客毕老师视频讲解)
- Java中Map接口(传智播客毕老师视频讲解)
- Java中增强for循环(传智播客毕老师视频讲解)
- Java中可变参数方法(传智播客毕老师视频讲解)
- Java中静态导入(传智播客毕老师视频讲解)
- Java中时间获取(传智播客毕老师视频讲解)
- Java多线程(6)——Thread类中的一些方法(传智播客毕老师视频讲解)
- monkey测试一些常用的命令
- Qwt直方图例子注释
- libevent笔记-事件/事件循环
- 《泛型编程与STL》读书笔记
- Spring MVC国际化配置
- Java中设计模式——装饰类(传智播客毕老师视频讲解)
- heapSort之应用
- asp.net实现ftp上传代码(解决大文件上传问题)
- 复习pdo,插入,查询
- USACO 刷水
- 说“无法对数据库'Alarm'执行删除,因为它正用于复制”
- hive表数据导出到csv乱码原因及解决方案
- 1412202059-hpu-1005:C语言考试练习题_排列
- qt组直方图例子-qwt