适配器模式在JAVA IO中的例子

适配器模式的定义: 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

在JAVA IO中,一个常见的场景: 解析一个文本文件,逐行处理其中的字符串,代码如下:

BufferedReader br = new BufferedReader(new InputStreamReader(is2,"utf8"));(将字节流接口,转换成字符流接口)
br.readLine();

首先因为要逐行解析字符串, 我们需要使用字符流,对文件内容进行处理, 所以使用Reader输入流下面的BufferedReader

BufferedReader并不能直接处理文件,它需要传入一个Reader类型的参数,Reader下面能处理文件的类:InputStreamReader,以及其子类FileReader

这2个类都需要一个InputStream来读取文件中的内容并转换, 这2个类其实就是适配器, 可以把字节流转换成字符流, 然后使用Reader来解析其中的内容


这里的情况就是, 我们需要使用Reader字符流来解析, 但是只有InputStream字节流能直接读取文件内容

所以我们需要一个适配器InputStreamReader, 这个类继承了Reader, 并且持有InputStream的引用, 这是对象适配器的一种


适配器的类图:

适配器模式在JAVA IO中的例子_第1张图片


对应到IO的例子中,target接口就对应了Reader抽象类, adaptee对应到我们的InputStream, InputStreamReader就是适配器Adapter

适配器有2种形式,第一种是直接继承被适配的类adaptee, 并实现目标接口, 这种属于类适配器,但是JAVA中不能多重继承,所以使用会有限制

另一种是实现目标接口,  并关联被适配的类adaptee,持有adaptee的引用, 属于对象适配器,上面的例子中,使用的就是对象适配器

你可能感兴趣的:(设计模式)