设计模式在Java I/O 库中的应用

Java语言采用流的机制实现输入/输出。所谓流,就是数据的有序排列,而流可以从某个源出来,到某个目的地去。

Java I/O库的两个设计模式

装饰模式:在InputStream、OutputStream、Reader和Writer代表的等级结构内部,有一些流处理器可以对其他流处理器起到装饰作用,形成新的、具有改善了功能了的流处理器。如图:

这里写图片描述

适配器模式:有一些流处理器是对其他类型的流的适配。

装饰模式的应用

为什么在I/O库中使用装饰模式

Java I/O 库需要很多功能的各种组合,如果这些功能都是用继承的方法实现,那么每一种组合都需要一个类,这样就会造成大量功能重复的类。

InputStream类型中的装饰模式:

InputStream有七个直接具体的子类,有四个属于FilterInputStream的具体子类,如下图:

这里写图片描述

上图中所有的类都叫做流处理器,根据输入流的源的类型,将这些类分成两种,即原始流类和链接流处理器。

原始流处理器:原始流处理器接收一个Byte数组对象、String对象、FileDescriptor对象等,并生成一个InputStream类型的流对象。包括以下四种:

ByteArrayInputStream:接收一个Byte数组作为流的源。
FileInputStream:接收一个File对象作为流的源。
StringBufferInputStream:接收一个String对象作为流的源。

链接流处理器:可以接收另一个同种类型的流对象作为流源,并对之扩展。它们都接收另一个InputStream对象作为流源。

BufferInputStream:从硬盘将数据读入到一个内存缓冲区,并从此缓存区提供数据。
DataInputStream:读取原始类型的数据。
LineNumberInputStream:带有计数功能的过滤输入流。

装饰模式的各个角色

抽象构件角色:InputStream扮演。这是一个抽象类,提供统一的接口。
具体构件角色:ByteArrayInputStream、FileInputStream等原始流扮演。
抽象装饰角色:FilterInputStream扮演。实现了InputStream接口。
具体装饰角色:DataInputStream、BufferedInputStream等。

半透明的装饰模式

理想的装饰模式在对装饰对象进行功能增强时,要求具体构件角色、装饰角色的接口与抽象构件的接口一致,而适配器模式并不要求对源对象的功能进行增强,但是会改变源对象的接口,以便和目标接口符合。

这里写图片描述

适配器模式的应用

ByteArrayInputStream是一个适配器类:继承了InputStream接口,而封装了一个byte数组,换言之,它将一个byte数组的接口适配成InputStream的接口。

从byte流到char流的适配

InputStreamReader是从byte输入流到char输入流的一个适配,下面是类的结构图。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值