该模式是指基于已经存在的功能,对其提供增强的功能
装饰设计模式的由来,以IO流中Reader类为例:
假设要提高子类的读的效率,继承体系如下:
父类 Reader
子类 TextReader
子类 BufferedTextReader
//通过子类BufferedTextReader对TextReader进行增强
子类 MediaReader
子类 BufferedMediaReader
//通过子类BufferedTextReader对TextReader进行增强
子类 OtherReader
子类 BufferedOtherReader
//通过子类BufferedTextReader对TextReader进行增强
如果父类Reader有N多个子类,每个子类都需要再用子类进行增强,将会非常繁琐。
既然子类都是用来提高效率,不如就把这个功能提取出来,封装到一个类中。
谁需要被提高效率时,就把谁作为参数传递到该类的构造方法中
例如创建一个BufferedReader类来封装缓冲功能
class BufferedReader{
private Reader reader;
public BufferedReader(Reader reader){
this.reader = reader;
……
使用该类之后,继承体系如下:
父类 Reader
子类 TextReader
子类 MediaReader
子类 OtherReader
BufferedReader
这样代码量会大大减少,使用装饰设计模式可以使原有的继承体系得以简化。
因为是在原有功能上提供增强功能,所以这个类还属于原体系,属于其子类之一。
因此BufferedReade、BufferedWriter等都属于装饰设计模式,其中LineNumberReader作为BufferedReader的子类,同样属于该模式,详细的代码请参照字符流的缓冲区中的第6、7部分。
版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作! ↓↓↓