我有一个接受对象并对其进行处理的例程。对象可能是可变的,也可能不是可变的。
void CommandProcessor(ICommand command) {
// do a lot of things
}
相同的命令实例有可能在处理器中循环返回。当这种情况发生时,事情会变得很糟糕。我想检测这些回访者并阻止他们被处理。问题是我怎样才能透明地做到这一点,即不干扰对象本身。
这是我尝试过的
Boolean Visited {get, set}
在ICommand
. _
我不喜欢这样,因为一个模块的逻辑出现在另一个模块中。ShutdownCommand
与关闭有关,而不是与簿记有关。还有一个EatIceCreamCommand
可能总是回来False
,希望得到更多。一些非可变对象在设置器方面存在明显问题。
- 私下维护所有已处理实例的查找表。当一个对象首先检查列表时。
我也不喜欢这个。(1)性能。查找表变大。我们需要做线性搜索来匹配实例。(2) 不能依赖hashcode
。该对象可能会不时伪造不同的哈希码。(3) 将对象保存在列表中可以防止它们被垃圾收集。
我需要一种方法在只有我的代码才能看到的实例(ICommand)上放置一些不可见的标记。目前我不区分调用。只是祈祷同样的情况不要回来。有没有人有更好的想法来实现这个功能..?