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