设为首页 加入收藏

TOP

装饰者模式 Decoration(三)
2017-10-13 10:40:47 】 浏览:5965
Tags:装饰 模式 Decoration
饰者模式在jdk中的应用I/O

                                                 

    InputStream 相当于装饰者模式的Component
    FileInputStream,ByteArrayInputStream,ObjectInputStream这些对象直接继承了InputStream,相当于装饰者模式中的ConcreteComponent
    FilterInputStream 继承了InputStream,并且持有了一个InputStream ,相当于装饰者模式中的Decorator
    BufferedInputStream,PushbackInputStream,LineNumberInputStream,DataInputStream继承了FilterInputStream,相当于装饰者模式中的ConcreteDecorator

 

 //这里FileInputStream 相当于组件对象,BufferedInputStream这个装饰器装饰了FileInputStream对象
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("fileName")));
            byte[] buff = new byte[1024];
            bis.read(buff);
            System.out.println(new String(buff));

 

5.优点、缺点,使用场合

  优点:
    1.比继承更灵活
    从为对象添加功能的角度来看,装饰者模式比继承更为灵活。继承是静态的,一旦继承,所有的子类都有一样的功能。装饰者模式采用把功能分离到每个装饰器当中,
   通过对象组合的方式,在运行时动态的组合功能,被装饰对象最终由哪些功能,是由运行时动态组合的功能决定的
    2.复用功能更容易
    装饰模式把一系列复杂的功能分散到每个装饰器中,一般情况下每个装饰器只实现一个功能,使得实现装饰器变得简单,有利于装饰器功能的复用,可以给一个对象添加
    多个装饰器,也可以把一个装饰器装饰多个对象,从而实现复用装饰器的功能
    3.简化高层定义
    装饰者模式可以通过组合装饰器的方式,为对象添加任意多的功能;因此在高层定义的时候,不必把所有的功能都定义处理,只需要定义最基本的就可以了,在需要的时候可以
    通过组合装饰器的方式来完成所需的功能。

  缺点:会产生较多的细粒度的对象
  装饰模式把一系列复杂的功能分散到每个装饰器中,一般情况下每个装饰器只实现一个功能,这样会产生很多细粒度的对象,并且功能越复杂,细粒度对象越多。

本质:动态组合
注意:装饰者模式只是改变组件对象的外观Facde,并没有改变其内核

  使用场合:
    如果需要再不影响其他对象的情况下,以动态、透明的方式给对象增加职责,可以使用装饰者模式。
    如果不适合使用子类进行扩展的时候,可以考虑使用装饰者模式。装饰者模式使用的是对象组合的方式。 不适合子类扩展:比如扩展功能需要的子类太多,造成子类数量呈爆炸性增长。
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇文档对象模型DOM通俗讲解 下一篇PHP设计模式(五)建造者模式(Bu..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目