转载请注明出处:http://blog.csdn.net/u011569040/article/details/45114403
主要内容:
1.处理流使用实例
2.“装饰者(Decorator)”模式
3.节点流与处理流的关系
先介绍一个处理流-----BufferedReader
Reader和Writer这两个类以及这两个类的子类都属于字符流,所以BufferedReader也属于字符流,其次它是处理流,然后它还是输入流,故全称 字符输入处理流。
我们学习它主要使用它的readLine(),这个方法一次性可以读入一行的数据。
import java.io.*;
class Test{
public static void main(String args []){
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
fileReader = new FileReader("d:/code/users.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{
bufferedReader.close();
fileReader.close();
}
catch(Exception e){
System.out.println(e);
}
}
}
}
用到处理流之前必须的有一个节点流(如程序中的 fileReader),因为readLine() 并不是真正从文件里面来读数据,readLine()实际上是使用fileReader对象来读取的,然后把从fileReader中读取的数据进行进一步的处理。
fileReader和BufferedReader之间究竟有怎么样的关系呢?实际上使用的就是装饰者设计模式。
程序如下,以后好好分析:
先写一个工人的接口——Worker
interface Worker{
public void doSomeWork();
}
再写一个水管工和木匠的类:
class Plumber implements Worker{
public void doSomeWork(){
System.out.println("修水管");
}
}
class Carpenter implements Worker{
public void doSomeWork(){
System.out.println("修门窗");
}
}
现在很多公司都既有水管工又有木匠,每个公司对自己的两类员工的要求都不同
A公司对自己公司的水管工和木匠要求,进门对客户说“你好”,现在写一个AWorker类:
class AWorker implements Worker{
private Worker worker;
public AWorker (Worker worker){
this.worker = worker;
}
public void doSomeWork(){
System.out.println("你好");
worker.doSomeWork();
}
}
现在测试Test01.java
class Test01{
public static void main(String args []){
//生成一个A公司水管工对象
Plumber plumber = new Plumber();
AWorker aWorker1 = new AWorker(plumber);
aWorker1.doSomeWork();
Carpenter carpenter = new Carpenter();
AWorker aWorker2 = new AWorker(carpenter);
aWorker2.doSomeWork();
//AWorker 是修饰者,carpenter、plumber是被装饰者(给他们装饰了 进门说“你好”)
}
}
结果: