裝飾與繼承的區別

相同點: 都是創建一個新的類來加強原有類的功能。
不同點: 裝飾是把原有類當成參數傳遞給新建類。
裝飾的應用:當基於某個類的幾個新類都用到了相同的技術,比如把幾個操作不同數據的Reader類通過繼承來新建操作不同數據類型的幾個BufferedReader類,這裏只是對現有類使用緩衝技術,既可以採用裝飾設計模式,把原有的Reader類當做參數傳遞給一個新建類(有時和多態相關),這樣形成的結構比繼承更清晰。

裝飾設計模式舉例—–自定義BufferedReader
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
this.r = r;
}
public String myReadLine() throws Exception//
{
StringBuilder sb = new StringBuilder();
int ch = 0;
while((ch = r.read())!=-1)
{
if(ch == ‘\r’)
{
continue;
}
if(ch ==’\n’)
{
return sb.toString();
}
else
{
sb.append((char)ch);
}
}
if(sb.length()!=0)
{
return sb.toString();
}
return null;
}
public void myclose() throws Exception
{
r.close();
}
}
public class Demo {
public static void main(String[] args) throws Exception
{
MyBufferedReader r = new MyBufferedReader(new FileReader(“C:\Users\dellpc\Desktop\buf.txt”));
String str = null;
while((str = r.myReadLine())!=null)
{
System.out.println(str);
}
r.myclose();
}

}

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