Java中设计模式——装饰类(传智播客毕老师视频讲解)
2014-12-24 17:18
766 查看
装饰类设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能,则此自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强大的功能。如BufferedReader就是这种装饰类,以前的FileReader读文件,但BufferedReader类提供了更强大的一次读一行的readLine()方法。
同继承相比:装饰类模式灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系。
装饰类因为增强已有的对象,具备的功能和已有的是相同的,只不过提供了更强功能,所以装饰类和被装饰类通常都是属于一个体系的。
练习1:做一个类似于BufferedReader的包装类,有readLine()方法
练习2:做一个类似于LineNumberReader的包装类,可以统计行数,
当想要对已有的对象进行功能增强时,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能,则此自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强大的功能。如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(); } }结果如下:
相关文章推荐
- Java中StringBuffer与StringBuilder(传智播客毕老师视频讲解)
- Java中泛型(2)——泛型类(传智播客毕老师视频讲解)
- Java中集合框架工具类——Arrays(传智播客毕老师视频讲解)
- Java中集合框架工具类——Collections(传智播客毕老师视频讲解)
- Java中IO流(6)——键盘录入及流操作规律(传智播客毕老师视频讲解)
- Java中基本数据类型对象包装类(传智播客毕老师视频讲解)
- Java中静态导入(传智播客毕老师视频讲解)
- Java中IO流(3)——字符流缓冲区(传智播客毕老师视频讲解)
- Java中Runtime类(传智播客毕老师视频讲解)
- Java中IO流(1)——IO流概述(传智播客毕老师视频讲解)
- Java多线程(1)——多线程创建(传智播客毕老师视频讲解)
- Java对象初始化过程(传智播客毕老师视频讲解)
- Java中泛型(5)——泛型限定(传智播客毕老师视频讲解)
- Java中IO流(4)——字节流(传智播客毕老师视频讲解)
- Java多线程(4)——多线程JDK5.0升级版(传智播客毕老师视频讲解)
- Java中Collection子接口(2)——Set接口(传智播客毕老师视频讲解)
- Java中泛型(4)——泛型接口(传智播客毕老师视频讲解)
- Java中Collection子接口(1)——List接口(传智播客毕老师视频讲解)
- Java中IO流(2)——字符流(传智播客毕老师视频讲解)
- Java中System类(传智播客毕老师视频讲解)