1、处理流的使用实例
BufferedReader—字符输入处理流
public String readline() throws IOException—读取1行数据
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
例:读取整个文本
import java.io.*;
class Test{
public static void main(String args[]){
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
fileReader = new FileReader("d:/work/src/from.txt"); //被装饰者
bufferedReader = new BufferedReader(fileReader); //装饰者
String line = null;
while(true){
line = bufferedReader.readLine();
if(line ==null){
break;
}
System.out.println(line);
}
}catch(Exception e){
System.out.println(e);
}finally{
try{
fileReader.close();
bufferedReader.close();
}catch(Exception e){
System.out.println(e);
}
}
}
}
2、装饰者(Decorator)模式
interface Worker{
public void doSomeWork();
}
//A公司的员工
class AWorker implements Worker{
private Worker worker;
public AWorker(Worker worker){ //构造函数
this.worker = worker;
}
public void doSomeWork(){
System.out.println("Hello."); //A公司员工特有的操作,给A公司的员工进行装饰
worker.doSomeWork();
}
}
//水管工
class Plumber implements Worker{
public void doSomeWork(){
System.out.println("fix shui guan.");
}
}
//木匠
class Carpenter implements Worker{
public void doSomeWork(){
System.out.println("fix men chuang.");
}
}
class Test34{
public static void main(String args[]){
Plumber plumber = new Plumber();
AWorker aWorker = new AWorker(plumber); //AWorker为装饰者,plumber为被装饰者,作为参数传递到装饰者当中
aWorker.doSomeWork();
Carpenter carpenter = new Carpenter();
AWorker aWorker2 = new AWorker(carpenter);
aWorker2.doSomeWork();
}
}
D:\work\src>javac Worker.java
D:\work\src>javac Plumber.java
D:\work\src>javac Carpenter.java
D:\work\src>javac AWorker.java
D:\work\src>javac Test34.java
D:\work\src>java Test34
Hello.
fix shui guan.
Hello.
fix men chuang.
3、节点流与处理流的关系
节点流(被装饰者)是用来真正处理数据的,而处理流(装饰者)是用来装饰节点流的,为节点流添加新的功能。