java - 为什么要使用装饰器模式?

标签 java design-patterns decorator

我已经对这种模式进行了研究,但我仍然不确定为什么它比我将很快描述的替代方案 100% 好。我将讨论两种实现流的方法。就我而言,装饰器模式和我的方法是同一枚硬币的两个方面。

我不会在这里描述装饰器模式,因为我假设对此答案感兴趣的人已经熟悉它。

另一种方法是使用列表。列表本质上是有序的,并且似乎做同样的事情。假设我们有一个输出流,我们将其包装在加密流中,然后将其包装在 zip 流中。

OutputStream stream = new ZipStream(new EncryptStream(new OutputStream(outputLocation)));
stream.write(data);

另一种方法是创建一个输出流,并向其添加 zipper 和加密器。

OutputStream stream = new OutputStream(outputLocation);
stream.add(new EncyrptStream());
stream.add(new ZipStream());
stream.write(data);

OutputStream.write 的代码如下所示:

public void write(String data) {
  for(StreamDecorator d : decorators) {
    data = d.doMyThing(data);
  }
  //continue normal write operation
}

我说这两种方法是同一枚硬币的两面,这样说正确吗?如果没有,装饰器模式在哪里比这种方法更有用?

最佳答案

跟我的情况差不多。在您的列表模式中,您最终将调用:

zipStream.doMyThing(encryptStream.doMyThing(outputStream.doMyThing(data))));

区别只是您将使用特定的方法而不是构造函数,这在某些情况下可能会更好。

关于java - 为什么要使用装饰器模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184019/

相关文章:

java - Iterable接口(interface)的目的

c# - 哪种设计模式用于灵活的消息发送?

java - 当继承不是一种选择时如何实现重复行为

java - Android 登录 Facebook 崩溃

java - Short.toString(short s, int radix) 在哪里?

python - 装饰一个函数并添加功能,保留参数的数量

java - Java中Decorator模式添加 "uniqueness"约束

java - 从使用 GridLayout 设置的 JPanel 中删除最后一行

java - 迭代集合时的数据累积设计

java - 违反is-a关系的装饰器设计模式