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

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

}

100.1

二、装饰者模式
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();
}

100.2

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值