当前位置: 移动技术网 > IT编程>开发语言>Java > Java连载100-带有缓冲区的字符读与写、装饰者模式

Java连载100-带有缓冲区的字符读与写、装饰者模式

2020年03月21日  | 移动技术网IT编程  | 我要评论

黄金渔场120905中字,国外创意,智取生辰纲教案

一、bufferedwriter

1.使用带有缓冲区的字符读和写进行试验

 

package com.bjpowernode.java_learning;

import java.io.*;

​

public class d100_1_bufferedwriter {

  public static void main(string[] args) throws exception{

    //创建带有缓冲区的字符输出流

    string address = "c:\\\\users\\\\lenovo1\\\\workspaces\\\\myeclipse ci\\\\java_learning\\\\src\\\\com\\\\bjpowernode\\\\java_learning\\\\temp1.txt";

    bufferedwriter bw = new bufferedwriter(new filewriter(address));

    //或者如下这么写

    //bufferedwriter bw = new bufferedwriter(outputstreamwriter(new fileoutputstream(address,true)));

    //开始写

    bw.write("jdfoishjfuji");

    //写入一个行分隔符

    bw.newline();

    bw.write("这是一个测试的语句");

   

    //刷新

    bw.flush();

    //关闭

    bw.close();

   

    //使用bufferedreader和bufferedwriter来完成复制

    string address2 = "c:\\\\users\\\\lenovo1\\\\workspaces\\\\myeclipse ci\\\\java_learning\\\\src\\\\com\\\\bjpowernode\\\\java_learning\\\\temp2.txt";

    bufferedreader br = new bufferedreader(new filereader(address));

    bufferedwriter bw2 = new bufferedwriter(new filewriter(address2));

    string temp = null;

    while((temp=br.readline())!=null) {

      bw2.write(temp);

      bw2.newline();

    }

    bw2.flush();

    br.close();

    bw2.close();

   

  }

​

}

二、装饰者模式

1.先举一个简单的例子

对于a100这个类中的m1方法,我们想要扩展,我们可以想到的一个简单的方法就是创建一个新类b100,然后重写方法

但是这样的关联写太强了,因此还可以使用使用其他方法---装饰者模式

2.注意点​

(1)装饰者模式中要求:装饰者中含有被装饰者的引用

(2)装饰者模式中要求:装饰者和被装饰者应该实现同一个类型

 

package com.bjpowernode.java_learning;

​

public class d100_2_decoratormode {

  public static void main(string[] args) throws exception{

    a100 a = new a100();

    b100 b = new b100();

    a.m1();

    b.m1();

    system.out.println("=============");

    //1.创建被装饰者

   

    filereader fr = new filereader();

    //2.创建装饰者

    bufferedreader br = new bufferedreader(fr);

   

    //3.通过执行装饰者中的方法间接去执行被装饰者中的方法

    br.close();

  }

​

}

class a100{

  public void m1() {

    system.out.println("m1");

  }

}

class b100 extends a100{

  public void m1() {

    super.m1();

    system.out.println("重写了");

  }

}

//使用bufferedreader对filereader中的close方法进行扩展

class bufferedreader extends parent100{//bufferedreader100是装饰者

  //关联关系

  filereader reader;//filereader就是被装饰者

  //构造方法

  bufferedreader(filereader reader){

    this.reader = reader;

  }

  //对filereader中的close方法进行扩展

  public void close() {

    //扩展

    system.out.println("扩展代码1");

    reader.close();

    system.out.println("扩展代码2");

  }

}

class filereader extends parent100{

  public void close() {

    system.out.println("guanbi");

  }

}

abstract class parent100{

  public abstract void close();

}

三、源码:

d100_1_bufferedwriter.java

d100_2_decoratormode.java

https://github.com/ruigege66/java/blob/master/d100_1_bufferedwriter.java

https://github.com/ruigege66/java/blob/master/d100_2_decoratormode.java

2.csdn:https://blog.csdn.net/weixin_44630050

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网