装饰设计模式的最佳实践

时间:2016-04-21 19:32:38

标签: java design-patterns

在正确的地方装饰设计模式闪耀,但我注意到在许多应用程序中使用装饰时几乎没有错误。

一个例子(使用java.io),它证明了使用Decorator时出现的问题。

public OutputStream foo(...){
    return new BufferedOutputStream(...);
}

此方法存在问题,它将BufferedOutputStream返回为OutputStream,因此用户可以通过BufferedOutputStream再次修饰此对象(他不知道该方法返回缓冲流))所以在这里我们免费获得双缓冲(更糟糕的是表现更差)。

另一个例子:

public void foo(OutputStream os){
    BufferedOutputStream bos = new BufferedOutputStream(is);
    ...
}

这里有另一个例子,用户可以提供BufferedOutputStream到foo已经装饰它以供内部使用,用户可能希望通过提供缓冲流来提高性能,但实际上他正在使它更糟糕,它不是他的错,他不知道里面的方法是什么(黑匣子)。

所以任何人都可以告诉我使用Decorator设计模式的最佳做法是什么,不仅仅是java.io,而是一般用于Decorator?

0 个答案:

没有答案