我有一个 BlockingQueue 在生产者 - 消费者情况下使用的实施。我想装饰这个队列,以便记录从中取的每个对象。我知道直接实现的样子:只需实施 BlockingQueue 并接受 BlockingQueue 在所有方法将委派的构造函数中。有其他我想念的方式吗?也许是图书馆?带回调接口的东西?

有帮助吗?

解决方案

您可能希望考虑的替代方案是 动态代理. 。这使您可以使用反射风格的API来处理在给定接口上提出的请求 - 将所有调用委派给基础实现非常简单,同时,如果方法名称符合其中一种采用方法,则添加一些记录逻辑。

这种方法的缺点是,它在所有方法调用中增加了一些额外的开销(几乎可以肯定可以忽略的一般用途,尽管如果在性能至关重要的部分中使用,这应该是黄色标志),并且该代码最终会看起来很笨拙。最终,您正在做的是定义与您在帖子中描述的完全相同的行为,除非您不需要明确编写每个委派方法,否则提供了一种通配符的实现。

其他提示

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

编辑

如果OP使用多个实现,创建包装器是更好的实现 BlockingQueue, ,但它引入了很小的表现 全部 操作和其他次要问题。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top