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

    装饰器模式,顾名思义,就是将某个类重新装扮一下,使得它比原来的功能更加强大,这就是装饰器所要达到的目的。但是作为原来这个类的使用者,不应感受到装饰前和装饰后有什么不同,否则就破坏了原有类的结构了,所以装饰器模式要做到对被装饰类的使用者透明,这是对装饰器模式最基本的要求。

    装饰器模式的结构

    下图是一个装饰器模式的典型的类图结构,各个角色的描述如下:

    • Component:抽象组件角色,定义一组抽象的接口,规定被装饰组件有哪些功能
    • ConcreteComponent:实现这个抽象组件的所有功能
    • Decorator:装饰器角色,它持有Component角色的引用,定义一个和抽象组件一致的接口-
    • ConcreteDecorator:装饰器的具体实现,负责实现装饰器角色定义的功能

    Java IO中的装饰器模式

    装饰器模式的作用就是赋予被装饰器的类更多的功能,在Java IO类库中,有很多不同的功能组合情况,这些不同的功能组合就是使用装饰器模式实现的,下面以FilterInputStream为例来说明。

    InputStream类就是以抽象组件的角色存在的,而FileInputStream就是具体实现抽象组件所有功能的组件,FilterInputStream是装饰器角色,他实现了InputStream的所有接口,并且持有InputStream对象的引用,BufferedInputStream就是具体装饰器的实现者,它给InputStream添加了附加功能,使得InputStream读取的数据放在内存中,提升读取效率。

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

    装饰器模式和适配器模式都有一个别名就是包装模式(wrapper),它们都起到了包装一个类或则对象的作用,但是它们的使用目的不同,装饰器模式不改变被包装的接口,仅仅是争强原来接口的功能,而适配器模式要将一个接口转变为另一个接口,目的是通过改变接口达到重复使用。

  • 相关阅读:
    itertools mode 之 combinations用法
    Java排序方法及效率测试
    python数据处理——csv文件读取
    python数据处理——bsonId与时间戳的相互转换
    python图文识别案例
    python数据处理——字符串转数值类型
    ajax实现异步请求
    使用redis的evalsha功能实现获取数据时备份数据
    U盘写入保护去除(非物理性的)
    Git——.gitignore文件语法规范
  • 原文地址:https://www.cnblogs.com/senlinyang/p/8256948.html
Copyright © 2011-2022 走看看