/*
* 當需要增強一個類的功能的時候,可以通過繼承的方式來實現(xiàn)。這種方式代碼結(jié)構(gòu)清晰易于實現(xiàn).
*
* 裝飾者設計模式:
* 作用:增強一個類的功能洪规,而且還可以讓裝飾類相互裝飾.
* 思想:裝飾者設計模式要讓這些裝飾類有一個共同的父類或者父接口蚜印,目的是為了讓這些裝飾類可以勾著給一個裝飾鏈達到相互裝飾的效果》
* 步驟:
* 1. 在裝飾類的內(nèi)部維護一個被維護類的引用;
* 2. 讓裝飾類有一個共同的父類或是父接口,讓裝飾類之間可以互相裝飾敷搪;
*
*/
//帶行號的緩沖輸入字符流
package com.michael.lin;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
class BufferedLineNum extends BufferedReader{
//1.在類的內(nèi)部維護一個被裝飾類的引用
BufferedReader bufferedReader;
int count = 1;
public BufferedLineNum(BufferedReader bufferedReader){
super(bufferedReader);
this.bufferedReader = bufferedReader;
}
//2.實現(xiàn)要增強的方法
public String readLine() throws IOException{
String line = bufferedReader.readLine();
if(line == null){
return null;
}
line = count + " " + line;
count++;
return line;
}
}
//帶分號的輸入字符流
class BufferedSem extends BufferedReader{
//1.維護一個被裝飾類的引用兴想;s
BufferedReader bufferedReader;
public BufferedSem(BufferedReader bufferedReader){
super(bufferedReader);
this.bufferedReader = bufferedReader;
}
//實現(xiàn)readLine方法
public String readLine() throws IOException{
String line = bufferedReader.readLine();
if(line==null){
return null;
}
line = line + ";";
return line;
}
}
//帶雙引號的輸入緩沖字符流
class BufferedQuto extends BufferedReader{
//構(gòu)建一個裝飾類的引用
BufferedReader bufferedReader;
public BufferedQuto(BufferedReader bufferedReader){
super(bufferedReader);
this.bufferedReader = bufferedReader;
}
//實現(xiàn)readLine方法
public String readLine() throws IOException{
String line = bufferedReader.readLine();
if(line==null){
return null;
}
line = "\"" + line + "\"";
return line;
}
}
public class Demo7 {
public static void main(String[] args) throws IOException{
File file = new File("c:\\data.txt");
FileReader fileReader = new FileReader(file);
//建立緩沖輸入字符流
BufferedReader bufferedReader = new BufferedReader(fileReader);
//帶行號的輸入緩沖字符流
String line = null;
BufferedLineNum bufferedLinenum = new BufferedLineNum(bufferedReader);
/*while((line=bufferedLinenum.readLine())!=null){
System.out.println(line);
}*/
//帶分號的輸入緩沖字符流
BufferedSem bufferedSem = new BufferedSem(bufferedLinenum);
/*while((line=bufferedSem.readLine())!=null){
System.out.println(line);
}*/
//帶行號、分好赡勘、雙引號的輸入緩沖字符流
BufferedQuto bufferedQuto = new BufferedQuto(bufferedSem);
while((line=bufferedQuto.readLine())!=null){
System.out.println(line);
}
}
}