1. 处理流的使用实例
2. 装饰者(Decorator)模式
3. 节点流与处理流的关系
1. 处理流的使用实例
BufferedReader处理流介绍
public String readline() throws IO Exception
对于下面这样的文件, 每一行都是关于一个人的信息, 这种情况每次读一行是非常方便的
张三 F 20
李四 M 21
王五 F 22
赵六 M 23
BufferedReader使用方法
生成BufferedReader对象的方法
BufferedReader in = new BufferedReader(newFileReader("foo.in"));
BufferedReader处理流使用之前必须要有一个节点流
new BufferedReader(newFileReader("foo.in"));实际是将节点流传递给处理流
1 import java.io.*; 2 3 class Test{ 4 public static void main(String args []){ 5 FileReader fileReader = null ; 6 BufferedReader bufferedReader = null ; 7 try{ 8 fileReader = new FileReader("e:/Java/src/IO3/from.txt"); 9 bufferedReader = new BufferedReader(fileReader);10 String line = bufferedReader.readLine();11 System.out.println(line);12 }13 catch(Exception e){14 System.out.println(e);15 }16 finally{17 try{18 bufferedReader.close();19 fileReader.close();20 }21 catch(Exception e){22 System.out.println(e);23 }24 }25 }26 }
1 import java.io.*; 2 3 class Test{ 4 public static void main(String args []){ 5 FileReader fileReader = null ; 6 BufferedReader bufferedReader = null ; 7 try{ 8 fileReader = new FileReader("e:/Java/src/IO3/from.txt"); 9 bufferedReader = new BufferedReader(fileReader);10 String line = null;11 while(true){12 line = bufferedReader.readLine();13 if (line == null) break;14 System.out.println(line);15 } 16 }17 catch(Exception e){18 System.out.println(e);19 }20 finally{21 try{22 bufferedReader.close();23 fileReader.close();24 }25 catch(Exception e){26 System.out.println(e);27 }28 }29 }30 }
2. 装饰者模式
简化集成体系, 使用装饰者模式
A公司规定工人进门要说“你好”
B公司规定工人进门要穿鞋套
以前定义一个工人的接口, 在分别建4个类, A水管工, A木匠, B水管工, B木匠...这样多几个公司就会越来越庞大
1 interface Worker{ 2 public void doSomeWork(); 3 }
1 class Carpenter implements Worker{2 public void doSomeWork(){3 System.out.println("修理门窗");4 }5 }
1 class Plumber implements Worker{2 public void doSomeWork(){3 System.out.println("修理水管");4 }5 }
1 class AWorker implements Worker{ 2 private Worker worker ; //Workwe类型的成员变量 3 public AWorker(Worker worker){ 4 this.worker = worker ; 5 } 6 public void doSomeWork(){ 7 System.out.println("你好"); 8 worker.doSomeWork(); 9 }10 }
1 class Test01{2 public static void main(String args []){3 //生成一个A公司水管工对象4 Plumber plumber = new Plumber();5 AWorker aWorker = new AWorker(plumber);6 aWorker.doSomeWork();7 }8 }
这样做的好处在哪呢 , 假如我们要A木匠工作
1 class Test01{ 2 public static void main(String args []){ 3 //生成一个A公司水管工对象 4 Plumber plumber = new Plumber(); 5 AWorker aWorker = new AWorker(plumber); 6 aWorker.doSomeWork(); 7 8 Carpenter carpenter = new Carpenter(); 9 AWork awork2 = new AWorker(carpenter);10 aWorker2.doSomeWork();11 }12 }
避免了继承结构, 这样就简化了模式
AWorker叫做装饰者
Carpenter, Plumber叫做 被装饰者
装饰者 可以给被 装饰者 加些功能.
将 被装饰者 参数传递 给 装饰者