1,装饰与继承的区别
a,装饰模式比继承要灵活。避免了继承体系臃肿,而且降低了类与类之间的关系。
b,装饰类因为已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。所以装饰类和被装饰类通常都是属于一个体系中的。
2,装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
装饰设计模式示例:
现在优化思想。单独描述一下缓冲内容。将需要被缓冲的对象。传递进来。也就是,谁需要被缓冲,谁就作为参数传递给缓冲区。这样继承体系就变得很简单。优化了体系结构。
import java.io.*;
class MyBufferedReader extends Reader{//装饰设计模式
private Reader fr;
MyBufferedReader(Reader fr){
this.fr = fr;
}
public String MyreadLine()throws IOException{
StringBuilder sb = new StringBuilder();
int ch = 0;
while((ch=fr.read())!=-1){
if(ch=='\t')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
/*
* 覆盖父类中的抽象方法。
* */
public int read(char[] cbuf, int off, int len)throws IOException{
return fr.read(cbuf, off, len);
}
public void close(){
try{
if(fr!=null)
fr.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("d:\\file\\ExceptionDemo2.java");
MyBufferedReader mbr = new MyBufferedReader(fr);
String line = null;
while((line=mbr.MyreadLine())!=null){
System.out.print(line);
}
mbr.close();
}
}