装饰设计模式


该模式是指基于已经存在的功能,对其提供增强的功能

装饰设计模式的由来,以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部分。


版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作!             ↓↓↓

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