2011年计算机二级JAVA知识点:JavaIO包中的Decorator模式

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  Java IO包中的Decorator模式

  JDK提供的java.io包中使用了Decorator模式来实现对各种输入输出流的封装。以下将以java.io.OutputStream及其子类为例,讨论一下Decorator模式在IO中的使用。

  首先来看一段用来创建IO流的代码:

  以下是代码片段:

  try {

  OutputStream out = new DataOutputStream(new FileOutputStream("test.txt"));

  } catch (FileNotFoundException e) {

  e.printStackTrace();

  }

  这段代码对于使用过JAVA输入输出流的人来说再熟悉不过了,我们使用DataOutputStream封装了一个FileOutputStream。这是一个典型的Decorator模式的使用,FileOutputStream相当于Component,DataOutputStream就是一个Decorator。将代码改成如下,将会更容易理解:

  以下是代码片段:

  try {

  OutputStream out = new FileOutputStream("test.txt");

  out = new DataOutputStream(out);

  } catch(FileNotFoundException e) {

  e.printStatckTrace();

  }

  由于FileOutputStream和DataOutputStream有公共的父类OutputStream,因此对对象的装饰对于用户来说几乎是透明的。下面就来看看OutputStream及其子类是如何构成Decorator模式的:

2011年计算机二级考试JAVA知识点整理(82)

OutputStream是一个抽象类,它是所有输出流的公共父类,其源代码如下:

  以下是代码片段:

  public abstract class OutputStream implements Closeable, Flushable {

  public abstract void write(int b) throws IOException;

  ...

  }

  它定义了write(int b)的抽象方法。这相当于Decorator模式中的Component类。

  ByteArrayOutputStream,FileOutputStream 和 PipedOutputStream 三个类都直接从OutputStream继承,以ByteArrayOutputStream为例:

  以下是代码片段:

  public class ByteArrayOutputStream extends OutputStream {

  protected byte buf[];

  protected int count;

  public ByteArrayOutputStream() {

  this(32);

  }

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答