自己设计一个打印流(装饰模式)

1.打印流的设计意图

打印流设计的主要目的是为了解决OutputStream的设计缺陷,属于OutputStream的加强版本,如果操作不是二进制数据,只是想通过程序向终端目标输出信息,则使用打印流更加方便。OutputStream存在以下缺陷:
1.1所有数据必须转换转换为字节数组
1.2如果需要输出int,double等类型很麻烦

2.设计一个简单的打印流

设计打印流,解决OutputStream存在的问题, 但是其本质莫有脱离OutputStream,只是对它的功能做了一个封装而已。

package JavaSe.Io;
import java.io.*;
//输出流的强化版本
//char-String-byte
class PrintUtil{
    private OutputStream outputStream;
 //由外部传入要输出的目标终端
    public PrintUtil(OutputStream outputStream) {
        this.outputStream = outputStream;
    }
   //核心功能
    public void print(String data){
        try {
            this.outputStream.write(data.getBytes());//实际还是调用输出流的write方法,把字符串转成字节流
        } catch (IOException e) {
            e.printStackTrace( );
        }
    }
    public void println(String data){
        this.print(data+"\r\n");//txt文件中使用\r\n换行
    }
    public void print(int data) {
        this.print(String.valueOf(data));
    }
    public void println(int data) {
        this.println(String.valueOf(data));
    }
    public void print(double data) {
        this.print(String.valueOf(data));
    }
    public void Println(double data) {
        this.println(String.valueOf(data));
    }
    public void print(char data) {
        this.print(
                String.valueOf(data));
    }
    public void println(char data) {
        this.println(String.valueOf(data));
    }
    public void Close() throws IOException {
        outputStream.close();
    }


}
public class printStream {
    public static void main(String[] args) throws IOException {
        PrintUtil printutil=new PrintUtil(new FileOutputStream(
                new File(File.separator+"C:"+File.separator+
                "Users"+File.separator+"齐灵惠"+File.separator+"Desktop"
                +File.separator+"test.txt")));

        printutil.print("姓名: ");
        printutil.println("张三");
        printutil.print("年龄: ");
        printutil.println(18);
        printutil.print("收入: ");
        printutil.Println(10800.236);
        printutil.print("特定字符: ");
        printutil.println('k');
        printutil.Close();


   }
}

打印如下图:
在这里插入图片描述
重要提示: txt 文件中使用\r\n换行

3.使用系统提供的打印流

Java中提供了专门的打印流处理类;PrintStream(字节打印流),PrintWrite(字符打印流),使用Print Write几率更高一点。
PrintStream: public class PrintStream extends FilterOutputStream
常用构造: public PrintStream(OutputStream out)
PrintWrite: public class PrintWriter extends Writer
常用构造:public printWrite(OutputStream out),public PrintWrite (Write out )
类继承结构图:
在这里插入图片描述

package JavaSe.Io;

import java.io.*;
//打印流解决了OutputStream类的缺陷,装饰设计模式
//核心依然是OutputStream提供的Write()的功能,但是为了得到更好的操作效果,让其使用装饰类PrintStream
//支持更多的功能
public class TestPrintStream {
    public static void main(String[] args) throws IOException {
        File file=new File("C:\\Users\\齐灵惠\\Desktop\\wq.txt");
        //PrintStream printStream=new PrintStream(new FileOutputStream(file));
        //PrintWriter printWriter=new PrintWriter(new FileWriter(file));

        PrintWriter printWriter= new PrintWriter(new FileOutputStream(file));

        printWriter.print("李四");
        printWriter.println(25);
        printWriter.print(100000);
        printWriter.println("haha");
        printWriter.close();
    }
}

打印如下图:
在这里插入图片描述

4.装饰设计模式

打印流的设计属于装饰设计模式:核心依然是OutputStream提供的write()功能,但是为了更好的操作实现,让其使用的装饰类PrintStream的功能更多一些。
优点:很容易更换装饰类来达到不同的操作效果
缺点:造成类结构复杂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值