我已经对这种模式进行了研究,但我仍然不确定为什么它比我将很快描述的替代方案 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/