当前位置: 首页 > 面试题库 >

Java:举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?

翟聪
2023-04-24

在Java IO中运用了装饰器模式,inputStream作为抽象类,其下有几个实现类,表示从不同的数据源输入:

  1. byteArrayInputStream
  2. fileInputStream
  3. StringBufferInputStream
  4. PipedInputStream,从管道产生输入;
  5. SequenceInputStream,可将其他流收集合并到一个流内;

FilterInputStream作为装饰器在JDK中是一个普通类,其下面有多个具体装饰器比如BufferedInputStream、DataInputStream等。

FilterInputStream内部封装了基础构件:

protected volatile InputStream in;

而BufferedInputStream在调用其read()读取数据时会委托基础构件来进行更底层的操作,而它自己所起的装饰作用就是缓冲,在源码中可以很清楚的看到这一切。


 类似资料:
  • 问题内容: 在“深度”对象层次结构中使用Builder模式的最佳实践是什么?详细地说,我探讨了将Joshua Bloch提出的Builder模式应用于我的XML绑定代码的想法(我使用的是SimpleXML,但是这个问题将适用于任何情况)。我的对象层次结构深达4个级别,具有不同程度的复杂性。我的意思是,在某些级别上,我的对象只有几个属性,而在其他级别上,我最多可以有10个属性。 因此,请考虑以下假设

  • 我们有一个java系统,它在几个层中实现。在最低层,有些服务抽象了一系列基础结构组件,如数据库、BLOB存储、处理队列等。在此基础上,我们有一个领域层,它实现了使用一个或多个这些服务(使用命令和复合命令模式)的工作流。最后,在该层之上有一个基于jax-rs(jersey)的层,它提供了一个REST接口/协议,根据域层的工作流来实现。 我对Scala的经验有限,但我怀疑它可能是一个很好的工具,可以编

  • 最近我开始学习类加载器在Java中是如何工作的。以下是我注意到的三点: 点-1:每个类加载器都有一个父类加载器。当类加载器被要求加载类或资源时,它会在尝试加载项本身之前咨询其父类加载器。父级反过来咨询其父级,依此类推。因此,只有当所有祖先类加载器都找不到项时,当前类加载器才会参与其中。 Point-2:同一个类由两个加载器加载,被视为两个不同的类实体。我们甚至不能将一个类(加载器1)对象转换为另一

  • 零售商店的正确模式是什么?公司从商店销售产品。 这似乎违反了我对OOP所知的全部知识。通过层次结构向下传递数据的方法--在对象之间复制参数?我错过了什么?

  • 本文向大家介绍CNN的卷积核是单层还是多层的?相关面试题,主要包含被问及CNN的卷积核是单层还是多层的?时的应答技巧和注意事项,需要的朋友参考一下 描述网络模型中某层的厚度,通常用名词通道channel数或者特征图feature map数。不过人们更习惯把作为数据输入的前层的厚度称之为通道数(比如RGB三色图层称为输入通道数为3),把作为卷积输出的后层的厚度称之为特征图数。 卷积核的厚度H, 一般

  • 问题内容: 我具有实现的接口层次结构。我想使用不可变的对象,所以我想设计一些类来方便地构造这些对象。但是,我有很多接口,并且我不想在每种类型的子生成器中重复构建s 的代码。 因此,假设以下定义: 我怎样才能有效地实施的建设者和?他们应支持以下操作: 和 我不想为每个子生成器实现一个特殊情况。 编辑以添加第二个属性,以澄清使用简单的泛型无法做到这一点。我不是在寻找一种方式来组合和-我正在寻找一种方式