我有一个BlockingQueue
在生产者-消费者情况下使用的实现。我想装饰这个队列,以便记录从中取出的每个对象。我知道简单的实现会是什么样子:只需在构造函数中实现BlockingQueue
并接受 a BlockingQueue
,所有方法都将委托给它。还有另一种我想念的方式吗?也许是图书馆?有回调接口的东西?
问问题
258 次
2 回答
2
我原以为创建一个类来扩展BlockingQueue
接口的相关实现类并根据需要覆盖remove
方法和其他方法会更简单。
编辑
如果 OP 使用多个实现,则创建包装器是一个更好的实现BlockingQueue
,但它会对所有操作和其他小问题造成小的性能影响。
我的观点是扩展队列类是包装它的替代方法。是否是更好的选择取决于具体情况。
于 2010-05-21T09:38:27.743 回答
1
您可能希望考虑的替代方法是动态代理。这使您可以使用反射式 API 来处理在给定接口上发出的请求 - 将所有调用委托给底层实现将非常简单,同时如果方法名称与其中一个 take 方法匹配,则添加一些日志记录逻辑。
这种方法的缺点是它为所有方法调用增加了一些额外的开销(对于一般用途来说几乎可以忽略不计,尽管如果在性能关键部分使用这应该是一个黄色标志),并且代码最终看起来很麻烦. 最终,您所做的是定义与您在帖子中描述的完全相同的行为,除了您不需要明确编写每个委托方法而是提供一种通配符实现。
于 2010-05-21T13:18:35.490 回答