设计模式:装饰器模式(为对象动态的添加功能)

本文介绍了装饰器模式的作用、好处及其在Java IO中的应用。通过实例展示了如何使用装饰器模式为对象动态添加功能,以减少类的扩展问题,并提供了装饰器模式的代码实现,帮助理解其工作原理。
摘要由CSDN通过智能技术生成

前言


在学习 Java IO 的时候,记得头几回看到下面的代码,总是有点纳闷:

InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath));

这个代码,首先创建一个 FileInputStream 的对象,然后再传入到 BufferedInputStream 中,这是要干什么,为什么要这么做。

现在回过头来想,当时出现这些疑惑大部分原因是由于:

  1. 对于 Java IO的 stream 不熟悉。实际上比较常用的还有 DataInputStream,ObjectInputStream,FilterInputStream 等。
  2. 没有认识 装饰器模式。如果认识了装饰器模式,那么这些代码会很好理解了。

装饰器模式


作用与好处

装饰器模式 主要用于为对象动态的添加功能。比如说,最简单的 IO 使用可能是如下代码:

InputStream inputStream = new FileInputStream(filePath);

但是我们发现,这个代码 每次进行读取都会进行 一次 IO,IO是比较耗费时间的。 那么有没有什么方法降低 IO 次数呢,自然想到了缓冲。那么此时有两种做法:

  1. 定义一个 专门用于缓冲的文件读写 stream。
  2. 为 FileInputStream 类进行扩展,让它支持 缓冲。

肯定是第二种好,为什么呢。因为如果你按照1方案,
假如我要定义一个支持X功能,此时要定义一个 专门用于这个功能的stream,这个没有问题;
假如我又要定义一个支持Y功能,此时要定义一个专门用于这个功能的stream,这个也没有问题;

但是,假如我要定义一个 同时支持 X,Y功能,由于不能扩展,所以你必须再定义一个类,同时支持X,Y功能。这个就有问题了,问题就是重复了。
但是,2 方案就能解决这个问题, 2方案中当你需要一个同时支持 X,Y 功能的类,那你动态扩展便是了,不用再新定义一个类,同时支持XY。

这个就是装饰器模式的好处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值