欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-15 13:44:18
一、BufferedWriter 1.使用带有缓冲区的字符读和写进行试验 package com.bjpowernode.java_learning; import java.io.*; ​ public class D100_1_BufferedWriter { public static voi ......

一、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();

   

  }

​

}

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

二、装饰者模式

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();

}

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

三、源码:

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

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