在Java IO中運用了裝飾器模式,inputStream作為抽象類,其下有幾個實現類,表示從不同的數據源輸入:
byteArrayInputStream
fileInputStream
StringBufferInputStream
PipedInputStream,從管道產生輸入;
SequenceInputStream,可將其他流收集合并到一個流內;
FilterInputStream作為裝飾器在JDK中是一個普通類,其下面有多個具體裝飾器比如BufferedInputStream、DataInputStream等。
FilterInputStream內部封裝了基礎構件:
protected volatile InputStream in;
而BufferedInputStream在調用其read()讀取數據時會委托基礎構件來進行更底層的操作,而它自己所起的裝飾作用就是緩沖,在源碼中可以很清楚的看到這一切。