Java IO流之裝飾模式與介面卡模式講解
在Java IO流中,我們經常使用的是位元組流與字元流,下面附上幾張圖可以很清楚的瞭解他們之間的繼承關係,圖片來源於網路,在此感謝圖片的製作者。
1、位元組流各個類的繼承關係:
2、字元流各個類個繼承關係:
一、裝飾模式解讀:
什麼是裝飾模式呢?就比如有一個瓶子,我為了讓它好看點,給它插上些花,這就起到了裝飾作用。
在我們的日常使用開發中,經常看到這各個類的巢狀關係,如:
- DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("text.txt")));
- DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("text.txt")));
其中DataInputStream給FileInputStream起到包裝作用。到這裡,或許有人疑惑了,我怎麼知道它是不是給它起到了包裝作用,在這裡大家可以看上面的位元組流圖FilterInputStream和FilterOutputStream以及他們的子類,由於這連個類是抽象類,所以我們是使用他們的子類的。這裡大家可以看如下的幾個類的構造方法的引數型別:
BufferedInputStream /BufferedOutputStream :
- BufferedInputStream(InputStream in)
- BufferedOutputStream(OutputStream out)
- BufferedInputStream(InputStream in)
- BufferedOutputStream(OutputStream out)
DataInputStream / DataOutStream:
- DataInputStream(InputStream in)
- DataOutputStream(OutputStream out)
- DataInputStream(InputStream in)
- DataOutputStream(OutputStream out)
他們的引數都是要InputStream / OutputStream 的子類,那再來看看InputStream或OutputStream直接子類,而不是FilterInputStream或FilterOutputStream的子類:
- ByteArrayInputStream(byte[] buf)
- FileInputStream(File file)
- ByteArrayInputStream(byte[] buf)
- FileInputStream(File file)
可以看到它們的引數型別是位元組或檔案型別,所以它們是作為原資料,是可以被包裝的。
在這裡相信大家對Java的IO流裝飾模式有了一定的瞭解,主要就是:1、有原資料、可以被包裝的。2、包裝類,能包裝其他事物的,就是在原事物上新增點東西。
二、介面卡模式:
什麼是介面卡模式呢,相信大家都會想到膝上型電腦的電源就是個介面卡吧,不管它外部有多少伏電壓過來,只要經過了介面卡就能轉變成我電腦需要的伏數,其中介面卡起到了橋樑作用。就比如在生活中兩個人吵架,要他們和解,那肯定是需要第三者來調解吧。
那好,我們迴歸正題,Java IO流的介面卡模式又是怎樣的呢? 我們都知道IO流有字元和位元組流,那怎樣把位元組流轉換成字元流來使用的呢?這其中就是要使用到介面卡類了,如圖:
在這其中InputStreamReader和OutputStreamWriter就在位元組流與字元流中起到了橋樑作用, 如:
- BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("text.txt"))));
- BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("text.txt"))));
最後相信大家對Java IO流模式的使用有些瞭解,確切滴說原來我們平常這樣寫法是使用到了這種模式啊!
當然以上這兩種模式是比較常見的,在Java中有23種設計模式,每種模式都有它的奧妙之處,作為一名Java程式設計師,不瞭解Java設計模式還真說不過去,當然本人也在不斷領會中~~
Java23中設計模式:點此連結下載
相關文章
- 結構型模式之介面卡模式、橋接模式與裝飾器模式(一)模式橋接
- 設計模式讀書筆記之介面卡模式、裝飾者模式設計模式筆記
- 設計模式 #4 (裝飾器模式、介面卡模式)設計模式
- java設計模式之裝飾器模式Java設計模式
- Java設計模式之裝飾者模式Java設計模式
- 大型Java進階專題(八) 設計模式之介面卡模式、裝飾者模式、觀察者模式Java設計模式
- 設計模式詳解之結構型設計模式——介面卡、裝飾器設計模式
- Java學設計模式之裝飾器模式Java設計模式
- 8.java設計模式之裝飾者模式Java設計模式
- 設計模式第三講-裝飾者模式設計模式
- Java設計模式之介面卡模式Java設計模式
- java設計模式--裝飾器模式Java設計模式
- 設計模式(九)——裝飾者模式(io原始碼分析)設計模式原始碼
- 設計模式系列之「裝飾模式」設計模式
- 設計模式之-裝飾器模式設計模式
- 設計模式之裝飾者模式設計模式
- 設計模式之【裝飾器模式】設計模式
- 設計模式:代理、裝飾和介面卡模式的區別設計模式
- Java設計模式之(八)——介面卡模式Java設計模式
- Java設計模式(3)-裝飾者模式Java設計模式
- Java 設計模式(五)《裝飾器模式》Java設計模式
- Java設計模式系列-裝飾器模式Java設計模式
- PHP設計模式之裝飾者模式PHP設計模式
- Go 設計模式之裝飾器模式Go設計模式
- 設計模式之裝飾者模式(二)設計模式
- 設計模式之裝飾者模式(一)設計模式
- 6.java設計模式之介面卡模式Java設計模式
- Java設計模式之介面卡設計模式Java設計模式
- Java進階篇設計模式之五-----外觀模式和裝飾器模式Java設計模式
- 【趣味設計模式系列】之【裝飾器模式】設計模式
- 設計模式之裝飾器模式(decorator pattern)設計模式
- Golang 常見設計模式之裝飾模式Golang設計模式
- PHP設計模式之裝飾器模式(Decorator)PHP設計模式
- 裝飾模式(裝飾設計模式)詳解——小馬同學@Tian設計模式
- 設計模式第五講-介面卡模式設計模式
- 設計模式(十一)----結構型模式之裝飾者模式設計模式
- 修飾者模式(裝飾者模式,Decoration)模式
- 設計模式——裝飾模式設計模式
- 設計模式-裝飾模式設計模式