/*
裝飾設計模式:基於已經存在的功能,提供增強的功能
裝飾設計模式的由來:
Rreader
---TextReader
---MediaReader
提高子類的讀的效率
Reader
---TextReader
---BufferedTextReader
---MediaReader
---BufferedMediaReader
---OtherReader
---BufferedOtherReader
既然都是提高讀的效率,所以就把這個功能提取出來,封裝到一個類
中,誰需要被提高效率就把誰作爲參數傳遞給該類的構造方法
class BufferedReader{
private Reader reader;
public BufferedReader(Reader reader){
this.reader = reader;
}
}
使用裝飾設計模式後,繼承體系如下
Reader
---TextReader
---MediaReader
---OtherReader
---BufferedReader
1:裝飾設計模式使原有繼承體系變簡單了
2:因爲是在原有功能提供增強功能,所以這個類還屬於原體系
*/
/*import java.io.*;
class test{
public static void main(String[] args)throws IOException{
FileReader fr = new FileReader("temp.txt");
LineNumberReader bnr = new LineNumberReader(fr);
String line = null;
bnr.setLineNumber(4);
while((line = bnr.readLine())!=null){
System.out.println(bnr.getLineNumber()+":"+line);
}
bnr.close();
}
}*/
//自定義LineNumberReader
import java.io.*;
class MyLineNumberReader extends MyBufferedReader{
private int lineNumber;
public MyLineNumberReader(Reader r){
super(r);
}
public void setLineNumber(int lineNumber){
this.lineNumber = lineNumber;
}
public int getLineNumber(){
return lineNumber;
}
//重寫一次讀一行的功能
public String myReadLine()throws IOException{
++lineNumber;
return super.myReadLine();
}
}
//上篇中有介紹
class MyBufferedReader{
private Reader r;//具備讀功能的成員
private char[] arr = new char[1024];//提高效率的緩衝區
private int index;
private int count;//統計緩衝區中的字符個數
public MyBufferedReader(Reader r){
this.r = r;
}
//一次讀一個字符的功能
public int myRead()throws IOException{
//先判斷緩衝區中是否有字符
if(count==0){
//從文件中讀一批數據到緩衝區
count = r.read(arr);
index = 0;//下標置爲0,從頭開始取
}
if(count<0){
return -1;
}
int num = arr[index];//從緩衝區中取一個字符
count--;//數量-1
index++;
return num;
}
//一次讀一行的功能
//反覆調用myRead()方法,不夠一行的時候存儲,夠一行的時候返回
public String myReadLine()throws IOException{
StringBuilder sb = new StringBuilder();//實現存儲字符
int num;
while((num=myRead())!=-1){
if(num=='\r')
continue;
else if(num=='\n')
return sb.toString();
else
sb.append((char)num);
}
return null;
}
public void myClose()throws IOException{
r.close();
}
}
class test{
public static void main(String[] args)throws IOException{
FileReader fr = new FileReader("temp.txt");
MyLineNumberReader mnr = new MyLineNumberReader(fr);
String line = null;
while((line = mnr.myReadLine())!=null){
System.out.println(mnr.getLineNumber()+":"+line);
}
mnr.myClose();
}
}
Java——裝飾設計模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.