Java 当中的io流
今天记录下关于装饰者的学习
一、处理流使用实例
1、本地新建一个users文本文档(刚入门没有使用IDE,都是在字符界面下进行编译和运行的,用文本文档进行代码的编写),内容如下:
张三 最强王者 850点
李四 超凡大师 700点
赵武 璀璨砖石 85点
王八 最强青铜 0点
刘六 不屈白银 25点
孙九 荣耀黄金 35点 //随便写的哈哈哈;
//目的就是使用节点流来读取文件(单位:行);
2、新建Test.java文件(.txt改一下后缀名即可,看不到的同学记得文件夹选项中点了显示已知文件和文件夹后缀名的选项;)下面贴代码:
`//导入类
java.io.*;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Test{ public static void main(String args []){ FileReader filereader = null; BufferedReader bufferedreader = null; try{ filereader = new FileReader("e:/eclipse/src/2016.02.25/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{ filereader.close(); bufferedreader.close(); } catch(Exception e){ System.out.println(e); } } } }`
|
3、编译运行 ==》win+R -- cmd -- 文件件路径输进去 -- javac *.java -- java Test
结果就是![运行结果](http://img.blog.csdn.net/20160302145715612)
二:“装饰者”模式
1、举个Mars老师的例子吧 就是有一个工人的类 下面又分为各种工人比如说(水管工 木匠工 等等)
然后工人们又分为有A 公司的,B公司的,C公司的一次类推,如果每个工人都要写一个类的话,我们假设有N个工种,有M个公司,那么我们需要新建的class的个数就是:M*N个 这点很明显不符合计算机语言的做法,编程就是去繁化简,争取消灭所有的重复性的代码。因此就需要用到“装饰者”模式了。
2、新建一个接口名为 Aworker:
Worker{1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| public void doSomeWorker(); } 新建水管工、木匠工、A公司、B公司类 //水管工 class Plumber implements Worker{ public void doSomeWorker(){ System.out.println("修水管!!!"); } } //木匠工 class Carpenter implements Worker{ public void doSomeWorker(){ System.out.println("修门窗!!!"); } } //A公司 class Aworker implements Worker{ private Worker worker; public Aworker(Worker worker){ this.worker = worker; } public void doSomeWorker(){ System.out.println("你好"); worker.doSomeWorker(); } } //B公司 class Bworker implements Worker{ private Worker worker; public Bworker(Worker worker){ this.worker = worker; } public void doSomeWorker(){ System.out.println("我要带鞋套@@@@"); worker.doSomeWorker(); } }
|
最后新建一个主函数来运行程序
Test01{1 2 3 4 5 6 7 8 9 10 11 12
| public static void main(String args []){ //生成一个A公司水管工的对象 Plumber plumber = new Plumber(); Aworker aworker1 = new Aworker(plumber); aworker1.doSomeWorker(); //生成一个B公司的木匠工对象 Carpenter carpenter = new Carpenter(); Bworker bworker1 = new Bworker(carpenter); bworker1.doSomeWorker(); } }
|
运行结果:![运行结果](http://img.blog.csdn.net/20160302151838939)
三、节点流与处理流之间的关系
FileReader在(被装饰者)就是节点流,是真正读取数据的(单位:字符) 而处理流(装饰者)就是用来 给节点流添加功能的 ,使得前者可以一行一行的读取数据(BufferedReader).