Java IO设计模式总结
一、装饰器模式
装饰器模式(Decorator)可以在不改变原有对象的情况下拓展其功能。装饰器模式通过组合替代继承来扩展原始类的功能,在一些继承关系比较复杂的场景(IO这一场景各种类的继承关系就比较复杂)更加实用。
对于字节流来说,FilterInputStream(对应输入流)和FilterOutputStream(对应输出流)是装饰器模式的核心,分别用于增强InputStream和OutputStream子类对象的功能。
- 装饰器模式很重要的一个特征,那就是可以对原始类嵌套使用多个装饰器。为了实现这一效果,装饰器类需要跟原始类继承相同的抽象类或者实现相同的接口。
二、适配器模式
适配器(Adapter Pattern)模式主要用于接口互不兼容的类的协调工作,可以将其联想到我们日常经常使用的电源适配器。
适配器模式中存在被适配的对象或者类称为适配者,作用于适配者的对象或者类称为适配器。适配器分为对象适配器和类适配器。类适配器使用继承关系实现,对象适配器使用组合关系来实现。IO流中的字符流和字节流的接口不同,它们之间可以协调工作就是基于适配器模式来做的,是对象适配器。通过适配器,我们可以将字节流对象适配成一个字符流对象,这样我们可以直接通过字节流对象来读取或者写入字符数据。
- 适配器模式和装饰器模式有什么区别?
装饰器模式更侧重于动态地增强原始类的功能,装饰器类需要跟原始类继承相同的抽象类或者实现相同的接口。并且,装饰器模式支持对原始类嵌套使用多个装饰器。
适配器模式更侧重于让接口不兼容而不能交互的类可以一起工作,当我们调用适配器对应的方法时,适配器内部会调用适配者或者和适配类相关的类的方法,这个过程透明的。
三、工厂模式
工厂模式用于创建对象,NIO(New IO)中大量用到了工厂模式,比如Files类的newInputStream方法用于创建InputStream对象(静态工厂)、Paths类的get方法创建Path对象(静态工厂)、ZipFileSystem类的getPath的方法创建Path对象(简单工厂)。
四、观察者模式
NIO中的文件目录监听服务使用到了观察者模式。
NIO中的文件目录监听服务基于WatchService接口和Watchable接口。WatchService属于观察者,Watchable属于被观察者。
Watchable接口定义了一个用于将对象注册到WatchService(监控服务)并绑定监听事件的方法register