我有一个BlockingQueue
实现正在生产者 - 消费者的情况下使用。我想装饰这个队列,以便记录从它获取的每个对象。我知道简单的实现是什么样的:只需实现BlockingQueue
并接受所有方法将委派给其的构造函数中的BlockingQueue
。有没有另一种方法,我错过了?一个图书馆可能?有回调界面的东西?BlockingQueue修饰器,记录已删除的对象
回答
您可能希望考虑的另一种选择是dynamic proxies。这使您可以使用反射式API来处理在给定接口上发出的请求 - 将所有调用委托给基础实现非常简单,同时添加一些日志记录逻辑(如果方法名称与匹配方法之一匹配)。
这种方法的缺点是它增加了所有方法调用的额外开销(几乎可以忽略一般使用,尽管如果在关键性能部分使用这个应该是黄色标志),并且代码可以最终看起来很麻烦。最终,您所做的是定义与您在帖子中描述的行为完全相同的行为,除非您不需要明确编写每个委托方法,而是提供一种通配实现。
我原以为创建一个扩展BlockingQueue
接口的相关实现类并覆盖remove
方法的类将会更简单,并且会根据需要替换其他方法。
编辑
创建的包装是一个更好的实施,如果OP是使用一个以上的实施BlockingQueue
,但它引入了一个小的性能击中所有操作,和其他小问题。
我的观点是,扩展队列类是替代封装它。这是否是一个更好的选择取决于具体情况。
我们是否都在谈论相同的界面? Java'BlockingQueue'接口中没有'accept'方法。 – 2010-05-21 09:42:25
BlockingQueue是一个接口 - 鉴于此,我认为OP提出的组合方法比继承更好,因为它意味着它们可以在不同的BlockingQueue实现中交换。 – Adamski 2010-05-21 10:51:49
- 1. 从QueryBuilder中删除对象的记录
- 2. 替代删除触发器以跟踪已删除的记录
- 3. 从JSON对象删除记录Javascript
- 4. 保留已删除项目的记录
- 5. 已删除记录的当前计数
- 6. python 2.7:删除处理程序对象或记录器
- 7. lucene删除记录,已弃用?
- 8. 轨道4:找哪家加入对应记录的记录已被删除
- 9. 从Apex数据加载器检索已删除的记录?
- 10. 隐藏已删除的对象
- 11. 删除记录
- 12. 删除记录
- 13. 从链接中删除文字修饰
- 14. 如何从accesskey中删除修饰符
- 15. 如何在活动目录中查看已删除的对象
- 16. 修饰Grails标记
- 17. Django unique_together并将对象标记为“已删除”
- 18. 从has_many中删除对象,但不要删除Rails中的原始记录?
- 19. 删除已被删除的会话对象
- 20. Python PySide(已删除内部C++对象)
- 21. RealmSwift“对象已被删除或无效”
- 22. C#删除标记的对象,
- 23. 从我的HTML删除对象标记
- 24. 在数据库表中标记已删除的记录
- 25. 无法删除更改记录中的物料对象 - CC02
- 26. @IonicPage修饰符已弃用?
- 27. 恢复SVN历史记录已删除的目录
- 28. 删除子记录删除实体中的父记录
- 29. 从活动记录关系中删除对象而不删除它
- 30. 删除unforgeted记录
好主意!它会偶尔用于记录'BlockingQueue',所以性能并不是什么大问题。本文有一个使用动态代理进行日志记录的示例:http://www.ibm.com/developerworks/java/library/j-jtp08305.html – 2010-05-21 14:52:16