我有一个BlockingQueue
实现,用于生产者 - 消费者的情况。我想装饰这个队列,以便记录从中获取的每个对象。我知道简单的实现是什么样的:只需实现BlockingQueue
并在构造函数中接受BlockingQueue
,所有方法都将委托给它。还有另外一种方法让我失踪吗?或许图书馆?有回调接口的东西吗?
答案 0 :(得分:2)
我认为创建一个扩展BlockingQueue
接口的相关实现类的类会更简单,并根据需要覆盖remove
方法和其他方法。
修改强>
如果OP使用多个BlockingQueue
的实现,则创建包装器是一种更好的实现,但它会对所有操作以及其他小问题引入小的性能。< / p>
我的观点是扩展队列类是包装它的替代方法。是否更好的选择取决于具体情况。
答案 1 :(得分:1)
您可能希望考虑的替代方案是dynamic proxies。这允许您使用反射式API来处理在给定接口上发出的请求 - 将所有调用委托给底层实现非常简单,而如果方法名称与其中一个take方法匹配,则添加一些日志记录逻辑。
这种方法的缺点是它为所有方法调用增加了一些额外的开销(对于一般用途几乎可以忽略不计,但如果在性能关键部分中使用它应该是黄色标记),并且代码可以结束看起来很累赘。最终你所做的是定义你在帖子中描述的完全相同的行为,除了你不需要明确地编写每个委托方法,而是提供一种通配实现。