Java中I/O库的设计原则

面试中遇到了此类题目,再次做个记录,以备只需!

1.在Java的I/O中有两个设计的结构:装饰模式和适配器模式

2.Java库中的对称性:

(1)输出-输入对称:处理Byte流的InputStream和OutputStream;处理Char流的Reader和Writer。

(2)byte-char对称:InputStream与Reader的子类分别负责Byte和Char的输入;OutputStream与Writer的子类分别负责Byte和Char流的输出,它们分别形成平行的等级结构。

3.模式应用:

装饰模式:

InputStream的装饰模式

装饰模式的各个角色:

(1)抽象构件(Component)角色:由InputStream扮演。这是一个抽象类,为各种子类型流处理器提供统一的接口。

(2)具体构件(ConcreteComponent)角色:由ByteArrayInputStream、FileInputStream、 PipedInputStream以及StringBufferInputStream等原始流处理器扮演。他们实现了抽象构件角色所规定的接口,可以被 链接流处理器所装饰。

(3)抽象装饰(Decorator)角色:由FilterInputStream扮演。它实现了InputStream所规定的接口。

(4)具体装饰(ConcreteDecorator)角色:由几个类扮演,分别是DataInputStream、BufferInputStream以及两个不常用的类LineNumberInputStream和PushBackInputStream

注意:StringBufferInputStream、LineNumberInputStream已经过时,不再推荐使用。

OutputStream的装饰模式:

装饰模式中的各个角色:

(1)抽象构件(Component)角色:由OutputStream扮演。这是一个抽象类,为各种的子类型流处理器提供统一的接口。

(2)具体构件(ConcreteComponent)角色:由ByteArrayOutputStream、FileOutputStream以及PipedOutputStream等扮演,它们均实现了OutputStream所声明的接口。

(3)抽象装饰(Decorator)角色:由FilterOutputStream扮演。它有与OutputStream相同的接口,而这正是装饰类的关键。

(4)具体装饰(ConcreteDecorator)角色:由几个类扮演,分别是BufferedOutputStream、DataOutputStream,以及PrintStream。

Reader中的装饰模式:

装饰模式中的各个角色:

(1)抽象构件(Component)角色: 由Reader扮演。这是一个抽象类,为各种的子类型流处理器提供统一的接口。

(2)具体构件(ConcreteComponent)角色:有CharArrayReader、InputStreamReader、PipedReader以及StringReader等扮演,它们均实现了Reader所声明的接口

(3)抽象装饰(Decorator)角色:由BufferedReader以及FilterReader扮演。这两者有着与Readeer相同的接口,而这正是装饰类的关键

(4)具体装饰(ConcreteD)角色:分别是LineNumberReader作为BufferedReader的具体装饰角色,PushbackReader作为FilterReader的具体装潢角色。

Writer中的装饰模式:

装饰模式中的各个角色:

(1)抽象构件(Component)角色:由Writer扮演。这是一个抽象类,为各种的子类型流处理器提供统一的接口。

(2)具体构件(ConcreteComponent)角色:由CharArrayWriter、OutputStreamWriter、PipedWriter以及StringWriter等扮演,它们均实现了Reader所声明的接口。

(3)抽象装饰(Decorator)角色:由BufferedWriter、FilterWriter以及PrintWriter扮演,它们有着与Writer相同的接口。

(4)具体装饰(ConcreteDecorator)角色:是与抽象装饰角色合并的。由于抽象装饰角色与具体装饰角色发生合并,因为装饰模式在这里被简化了。

-----------------------------------------------------华丽的分割线----------------------------------------------------------------

适配器模式的应用:

ByteArrayInputStream是一个适配器类:

FileOutputStream是一个适配器类:

StringBufferInputStream是一个适配器类:

ByteArrayOutputStream是一个适配器类:

PipedOutputStream是一个适配器类:

CharArrayReader是一个适配器类:

StringReader是一个适配器类:

其他,关于InputStreamReader,PipedReader等也都是适配器类。

CharArrayWriter是一个适配器类:

PipedWriter是一个适配器类:

StringWriter是一个适配器类:

参考:

http://www.2cto.com/kf/201404/291510.html

http://my.oschina.net/gao0516/blog/136103

原文地址:https://www.cnblogs.com/sxmcACM/p/4412044.html