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