乐趣区

关于java:设计模式装饰器

装璜器模式:在原有的性能附加额定的性能,从而扩大和强化已有的性能,同时也保留着原有性能的成果。

例如:JDK 的 IO 包里,就有很多装璜器的例子。如下 InputStream 的 UML 图:

InputStream 是所有输出流的顶级形象基类,其中定义了最根本的 read 办法,负责读取数据,如下:

这里以 BufferedInputStream 为例,这个类除了提供读取的性能,还能将输出流缓存起来,缩小数据传输的次数。从下面的 UML 能够晓得 BufferedInputStream 是集成 FilterInputStream,那看看 FilterInputStream 是怎么:

上面是 BufferedInputStream 的构造方法:

从下面能够看出,BufferedInputStream 的构造方法会把 InputStream 类型援用传给父类 FilterInputStream 并赋值给属性 in,并且初始化缓冲区 buf 的大小,用于缓冲读取到的 IO 数据。

这里缓冲的附加成果体现在 read 办法里,如下图:

其中 fill 办法外面实现就是间接调用属性 in 的 read 办法来读取数据并填充到缓冲区。

模式分析:

1、应用组合形式,在不扭转原有类实现的状况下,持有该类型援用,间接调用原有办法,并能够在调用前后进行性能扩大,复合开闭准则。

2、通过继承或实现的形式,让扩大的子类与原有类型兼容,合乎里氏替换准则。

本文由博客一文多发平台 OpenWrite 公布!

退出移动版