首页 > 代码库 > 装饰器模式

装饰器模式

典型的装饰器模式类结构图:

技术分享

其中各个角色描述如下:

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

Java I/O中装饰器模式的使用, 以FilterInputStream为例介绍装饰器模式的使用

技术分享

InputStream就是以抽象组件存在的, 而FileInputStream就是具体的组件类, 它实现了抽象组件的所有接口; FileInputStream无疑就是装饰角色, 它实现了InputStream的所有接口,

并持有InputStream的实例对象的引用; BufferedInputStream是具体的装饰器类实现者.它给InputStream类附件了功能, 这个装饰器类的作用就是使得InputStream读取的数据保存在内存中,而提高读取的性能, 与这个装饰器类有类似的功能还有LineNumberInputStream类,它的作用是提高按行读取数据的功能, 他们都是InputStream类增强了功能,或者提升了性能.

 

适配器模式与装饰器模式的区别:

装饰器模式与装饰器模式都有一个别名(Wrapper),它们看似都是起到包装一个类或对象的作用,但是使用他们的目的很不一样. 适配器模式的意义是将一个接口转变成另外一个接口, 他的目的是通过改变接口来达到重复使用的目的;而装饰器模式不是要改变装饰器对象的接口,而是恰恰要保持原有的接口,但是争强原有对象的功能,或者改变原有对象的处理方法而提升性能.所以这两个设计模式IDE目的是不同的.

装饰器模式