標籤:
面試中遇到了此類題目,再次做個記錄,以備只需!
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
Java中I/O庫的設計原則