记录已删除对象的BlockingQueue装饰器

时间:2010-05-21 09:34:35

标签: java decorator design-patterns blockingqueue

我有一个BlockingQueue实现,用于生产者 - 消费者的情况。我想装饰这个队列,以便记录从中获取的每个对象。我知道简单的实现是什么样的:只需实现BlockingQueue并在构造函数中接受BlockingQueue,所有方法都将委托给它。还有另外一种方法让我失踪吗?或许图书馆?有回调接口的东西吗?

2 个答案:

答案 0 :(得分:2)

我认为创建一个扩展BlockingQueue接口的相关实现类的类会更简单,并根据需要覆盖remove方法和其他方法。

修改

如果OP使用多个BlockingQueue的实现,则创建包装器是一种更好的实现,但它会对所有操作以及其他小问题引入小的性能。< / p>

我的观点是扩展队列类是包装它的替代方法。是否更好的选择取决于具体情况。

答案 1 :(得分:1)

您可能希望考虑的替代方案是dynamic proxies。这允许您使用反射式API来处理在给定接口上发出的请求 - 将所有调用委托给底层实现非常简单,而如果方法名称与其中一个take方法匹配,则添加一些日志记录逻辑。

这种方法的缺点是它为所有方法调用增加了一些额外的开销(对于一般用途几乎可以忽略不计,但如果在性能关键部分中使用它应该是黄色标记),并且代码可以结束看起来很累赘。最终你所做的是定义你在帖子中描述的完全相同的行为,除了你不需要明确地编写每个委托方法,而是提供一种通配实现。