设计模式之装饰器设计模式
Java的IO流使用了一种装饰器设计模式。它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物流存储结点直接关联——不同的物流节点获取该结点流的方式可能存在一定差异,但程序可以把不同的物理节点流包装成统一的处理流,总而允许程序使用统一的输入、输出代码来读取不同的物流存储结点的资源。
简单来说,装饰器模式就是将某个类重新装扮一下,使它比原来更漂亮或功能更强大,但是这个类袁蓓的使用者不会感受到装饰前和装饰后的区别,所以装饰器模式要做到对装饰类的使用者透明。
在由InputStream、OutputStream、Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的、具有改善了的功能的流处理器。
装饰器模式的结构:
Component:抽象组件角色,定义一组抽象接口,规定这个被装饰组件有哪些功能。
ConcreteComponent:实现这个抽象组件所有的功能。
Decorator:装饰器角色,它持有一个Component对象实例的引用,定义一个抽象组件一致的接口。
ConcreteDecorator:具体的装饰器是闲着,负责实现装饰器角色定义的功能。
Java IO中的装饰器模式
FilterInputStream的类结构图:
InputStream类就是以抽象组件存在的;而就是具体组件,他实现了抽象组件的所有接口;FilterInputStream类就是装饰角色,他实现了InputStream类的所有接口,并且持有InputStream的对象实例的引用;BufferedInputStream就是具体的装饰器实现者,他给InputStream类附加了功能,这个装饰器类的作用就是是的InputStream读取的数据保存在内存中,而提高读取的性能。
适配器模式和装饰器模式区别:
装饰器模式和适配器模式都有一个别名就是包装模式,他们都是起到包装一个类或对象的作用。但是他们的目的不同,适配器模式的意义试讲一个接口转变成另一个接口,他的目的之通过改变接口来达到重复使用的目的;而装饰器模式则是要保留原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方法而提升性能。