块式装饰器,该装饰器已将对象删除
-
04-10-2019 - |
题
我有一个 BlockingQueue
在生产者 - 消费者情况下使用的实施。我想装饰这个队列,以便记录从中取的每个对象。我知道直接实现的样子:只需实施 BlockingQueue
并接受 BlockingQueue
在所有方法将委派的构造函数中。有其他我想念的方式吗?也许是图书馆?带回调接口的东西?
解决方案
您可能希望考虑的替代方案是 动态代理. 。这使您可以使用反射风格的API来处理在给定接口上提出的请求 - 将所有调用委派给基础实现非常简单,同时,如果方法名称符合其中一种采用方法,则添加一些记录逻辑。
这种方法的缺点是,它在所有方法调用中增加了一些额外的开销(几乎可以肯定可以忽略的一般用途,尽管如果在性能至关重要的部分中使用,这应该是黄色标志),并且该代码最终会看起来很笨拙。最终,您正在做的是定义与您在帖子中描述的完全相同的行为,除非您不需要明确编写每个委派方法,否则提供了一种通配符的实现。
其他提示
我以为创建一个扩展相关实现类的类要简单 BlockingQueue
接口,覆盖 remove
方法和其他根据需要的方法。
编辑
如果OP使用多个实现,创建包装器是更好的实现 BlockingQueue
, ,但它引入了很小的表现 全部 操作和其他次要问题。
我的观点是,扩展队列类是包装它的替代方法。这是否是更好的选择取决于情况。
不隶属于 StackOverflow