zoukankan      html  css  js  c++  java
  • 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();
    
       
    
      }
    
    ​
    
    }

    二、装饰者模式

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

     

  • 相关阅读:
    浅析影响一个网站的因素
    23种常用设计模式的UML类图
    各版本IE兼容问题,IE6,IE7,IE8,IE9,IE10,IE11
    47种常见的浏览器兼容性问题大汇总
    5个Sublime Text 的插件推荐
    网页设计师神器,快速生成网站配色、字型等风格的工具——Stylify Me
    免费的高分辨率图库——re:splashed 可用做网页背景、设计或桌面壁纸
    MySQL(18):Select- subquery子查询
    MySQL(17):Select-union(联合查询)使用注意事项
    MySQL(16):Select-union(联合查询)
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12535997.html
Copyright © 2011-2022 走看看