根据IO流源码深入理解装饰设计模式使用

Posted cczequn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据IO流源码深入理解装饰设计模式使用相关的知识,希望对你有一定的参考价值。

一:摘要

  通过对java的IO类中我们可以得出:IO源码中使用装饰设计模式频率非常高,

  对装饰设计模式而言,他能够避免继承体系的臃肿,同时也可以动态的给一个对象添加一些额外的功能,如果要扩展一个功能,装饰设计模式提供了比继承更具有弹性的设计方案,当然还有动态代理模式,三者都是对现有有的功能进行改造。

二、案例:

  1、针对Reader这个类而言,我们可以看到使用的装饰设计模式之一是:

    BufferedReader br=new BufferedReader(new FileReader("c:\\\\1.txt"));

  针对上行代码,我们可以看出BufferedReader是一个装饰类,将FileReader对象传入到装饰类中,可以提供在此基础上更加强大的功能。

  同时,我们也可以从源码中查看出:

    1、BufferedReader类继承了Reader类

    2、将Reader类作为参数,传入到BufferedReader类中的 构造方法中

    3、在此基础上实现自己想要的功能:例如readLine()方法

    技术分享图片

    技术分享图片

    技术分享图片

  2、针对InputStream这个类,我们同样也可以看到使用装饰设计模式的地方:

    BufferedInputStream bis=new BufferedInputStream(new FileInputStream("c:\\\\1.txt"));

     针对上行代码,我们可以看出BufferedInputStream是一个装饰类,将FileInputStream对象传入到装饰类中,可以提供在此基础上更加强大的功能。

    同时,我们也可以从源码中查看出:

      1、BufferedInputStream类继承了FilterInputStream

 

      2、将InputStream类作为参数,传入到BufferedInputStream类中的 构造方法中

 

      3、在此基础上实现自己想要的功能

三、案例总结

  从上述源码案例中,我们可以看出一个实现装饰设计模式的大体流程

  1、首先定义一个接口或者抽象类作为被装饰类,例如:Reader类

  2、其次定义一个装饰类去继承或者实现被装饰类,同时将被装饰类作为参数传入到装饰类的构造方法中去

    例如:

    private Reader reader;

    public BufferedReader(Reader in) {
        this(in, defaultCharBufferSize);
    }

  3、扩展被装饰类的方法,在装饰类中实现自己想要的功能

 

 

    

 



以上是关于根据IO流源码深入理解装饰设计模式使用的主要内容,如果未能解决你的问题,请参考以下文章

[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。

深入理解设计模式-装饰者模式

深入理解设计模式-装饰者模式

[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。

[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。

深入理解设计模式---系列目录