存储和迭代具有不相关接口的对象集合?

Storing and iterating through a collection of objects with unrelated interfaces?

我有一组接口不相关的 POJO(例如,一个可能存储一个 int 和一个 boolean,一个可能只存储一个 String,等等。 ).然而,它们在逻辑上属于同一组——它们是代表不同类型更新的对象,根据特定的更新类型,具有不同的数据模型。我想收集这些“更新”对象并遍历它们,根据 class.

不同地处理每个具体事件

我对如何解决这个问题的想法是使用访问者模式,但我不确定访问者模式 can/should 是否可以用于不直接继承自同一个超级的对象class 或实现通用接口。是否有一个像下面这样的接口,其中唯一统一的因素是 accept 方法是一种有效的方法,或者是否有更适合这种情况的设计方法?然后我大概会有一个 Collection<Update> 我会迭代它。

public interface Update {
   public void accept(UpdateVisitor visitor);
}

Visitor 不需要通用接口(除了它自己的接口)。它的局限性在于它只适用于少数类型,而且这些类型应该是固定的。如果您只有少量不同的更新,并且您不希望将来添加更多,那么访问者是一个有效的解决方案。

或者,不要尝试将所有更新合并到一个集合中。在单独的集合中维护类型信息,并在单独的处理程序中处理它们。此解决方案可以扩展到访问者无法扩展的地方。