zoukankan      html  css  js  c++  java
  • 设计模式之装饰器设计模式

    Java的IO流使用了一种装饰器设计模式。它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物流存储结点直接关联——不同的物流节点获取该结点流的方式可能存在一定差异,但程序可以把不同的物理节点流包装成统一的处理流,总而允许程序使用统一的输入、输出代码来读取不同的物流存储结点的资源。

    简单来说,装饰器模式就是将某个类重新装扮一下,使它比原来更漂亮或功能更强大,但是这个类袁蓓的使用者不会感受到装饰前和装饰后的区别,所以装饰器模式要做到对装饰类的使用者透明。

    在由InputStream、OutputStream、Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的、具有改善了的功能的流处理器。

    装饰器模式的结构:

    Component:抽象组件角色,定义一组抽象接口,规定这个被装饰组件有哪些功能。

    ConcreteComponent:实现这个抽象组件所有的功能。

    Decorator:装饰器角色,它持有一个Component对象实例的引用,定义一个抽象组件一致的接口。

    ConcreteDecorator:具体的装饰器是闲着,负责实现装饰器角色定义的功能。

    Java IO中的装饰器模式

    FilterInputStream的类结构图: 

    InputStream类就是以抽象组件存在的;而就是具体组件,他实现了抽象组件的所有接口;FilterInputStream类就是装饰角色,他实现了InputStream类的所有接口,并且持有InputStream的对象实例的引用;BufferedInputStream就是具体的装饰器实现者,他给InputStream类附加了功能,这个装饰器类的作用就是是的InputStream读取的数据保存在内存中,而提高读取的性能。

    适配器模式和装饰器模式区别:

    装饰器模式和适配器模式都有一个别名就是包装模式,他们都是起到包装一个类或对象的作用。但是他们的目的不同,适配器模式的意义试讲一个接口转变成另一个接口,他的目的之通过改变接口来达到重复使用的目的;而装饰器模式则是要保留原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方法而提升性能。

  • 相关阅读:
    基于cocos2d-x的跑酷游戏,不同高度地面的碰撞检測demo,有兴趣能够看一看
    Dynamics CRM Form表单中通过javascript抓取触发change事件字段的属性名
    【项目实战】---使用ajax完毕username是否存在异步校验
    任务调度(三)——Timer的替代品ScheduledExecutorService简单介绍
    UML——用例图
    frameset怎样实现整个页面的跳转
    linux下怎样用c语言调用shell命令
    替换谷歌自带的安卓开发虚拟机?何不试试以下的虚拟机
    android环境下两种md5加密方式
    IOS-Storyboard控制器切换之Modal(1)
  • 原文地址:https://www.cnblogs.com/jiangwz/p/9088082.html
Copyright © 2011-2022 走看看