【概念解析四】装饰和继承的区别?

联系:装饰和继承都能实现同一特点:进行功能的扩展和增强。

区别:如果一个已有的继承体系已经很大,那么用子类继承重写方法的方式来增强功能,

会造成更加臃肿而且不符合组件即插即用扩展的原则。而装饰模式可以有效解决这两个问题,而且灵活不想用可以不用。

例如:

class Buffer{
Buffer(Writer w){}//针对接口编程
}
装饰特点:装饰类和被装饰类都必须所属同一个接口或者父类

LineNumberReader类:继承BufferedReader的,跟踪行号的缓冲字符输入流。

此类定义了方法setLineNumber(int)和getLineNumber(int),他们分别用于设置和获取当前的行号。

默认情况下,行编号从0开始。该行号随数据读取在每个行结束符处递增,

并且可以通过调用setLineNumber(int)更改行号(但不更改实际流中的当前位置,只更改getLineNumber(int)返回的值)。

例如:

public class LineNumberReaderDemo {
public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("demo.txt");
LineNumberReader lnr = new LineNumberReader(fr);
String line = null;
while((line=lnr.readLine())!=null){
System.out.println(line+":"+lnr.getLineNumber());
}
lnr.close();
}
}

你可能感兴趣的:(继承,装饰设计模式)