從裝飾模式看DataInputStream。

裝飾模式的作用是,不改變原類文件,不使用繼承,動態擴展方法。

DataInputStream in = new DataInputStream(new FileInputStream(“test.txt”));
我們知道FileInputStream是被裝飾的,FileInputStream是沒有readInt()這個方法的。但被DataInputStream 裝飾後,就有了DataInputStream 這個方法了,而DataInputStream 的readInt()源碼是這樣的。
// 從“數據輸入流”中讀取“int類型”的值
public final int readInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
再結合DataInputStream的構造函數
// 構造函數。
public DataInputStream(InputStream in) {
super(in);
}
我們可以看出,DataInputStream 的readInt()的擴展方式:其實就是先調用一下被裝飾對象fileInputStream的 in.read();然後 return一個封裝後的數據 ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章