设计模式-结构型-装饰器模式

  1. 1. Overview
    1. 1.1 Java IO类的使用
    2. 1.2 装饰器模式

1. Overview

1.1 Java IO类的使用

字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer

JavaIO库非常庞大,几十个类一同来负责IO数据的读取和写入。

InputStream in = new FileInputStream("/user/wangzheng/test.txt");
InputStream bin = new BufferedInputStream(in);
byte[] data = new byte[128];
while (bin.read(data) != -1) {
  //...
}

上述代码先使用了FileInputStream来读取文件流,然后又使用了BufferedInputStream,来支持缓存。

问题来了,为什么不能设置一个继承了FileInputStream并且支持缓存的BufferedFileInputStream类呢?

问题在于各种use case太多,如果为了各种功能的组合都设置一个类的话,那么类的继承结构会变得非常负责,代码会变得很难扩展和维护。

Java IO的设计思路,就是使用组合来替代继承

public abstract class InputStream {
  //...
  public int read(byte b[]) throws IOException {
    return read(b, 0, b.length);
  }

  public int read(byte b[], int off, int len) throws IOException {
    //...
  }

  public long skip(long n) throws IOException {
    //...
  }

  public int available() throws IOException {
    return 0;
  }

  public void close() throws IOException {}

  public synchronized void mark(int readlimit) {}

  public synchronized void reset() throws IOException {
    throw new IOException("mark/reset not supported");
  }

  public boolean markSupported() {
    return false;
  }
}

public class BufferedInputStream extends InputStream {
  protected volatile InputStream in;

  protected BufferedInputStream(InputStream in) {
    this.in = in;
  }

  //...实现基于缓存的读数据接口...  
}

public class DataInputStream extends InputStream {
  protected volatile InputStream in;

  protected DataInputStream(InputStream in) {
    this.in = in;
  }

  //...实现读取基本类型数据的接口
}

1.2 装饰器模式

  • 使用组合来替代继承关系
  • 装饰器类和原始类继承同样的父类,这样我们就可以对原始类嵌套多个装饰器类
  • 是对功能的增强,是和原始功能相关的
  • 为了解决继承关系过于复杂的问题

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com

文章标题:设计模式-结构型-装饰器模式

文章字数:414

本文作者:Leilei Chen

发布时间:2020-06-22, 20:09:04

最后更新:2020-06-22, 20:09:29

原始链接:https://www.llchen60.com/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E7%BB%93%E6%9E%84%E5%9E%8B-%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏