我有一组pojo,这些pojo在它们的接口中是不相关的(例如,可以存储 int
和一个 boolean
,只能存储 String
等)。但是,它们在逻辑上是同一组的一部分—它们是表示不同类型更新的对象,根据特定的更新类型,它们使用不同的数据模型。我想拥有这些“更新”对象的集合并遍历它们,根据类的不同处理每个具体事件。
我的想法是使用visitor模式,但我不确定visitor模式是否可以/应该用于那些不是直接从同一超类继承的对象或实现公共接口的对象。有一个像下面这样的界面,其中唯一的统一因素是 accept
方法是一种有效的方法,还是有更适合这种情况的设计方法?我大概会有一个 Collection<Update>
我会重复一遍。
public interface Update {
public void accept(UpdateVisitor visitor);
}
1条答案
按热度按时间5kgi1eie1#
访问者不需要公共接口(除了自己的接口)。它的局限性在于它只适用于少数类型,而这些类型应该是固定的。如果您只有少数几个不同的更新,并且您不希望在将来添加更多的更新,那么visitor是一个有效的解决方案。
或者,不要尝试将所有更新合并到一个集合中。在单独的集合中维护类型信息,并在单独的处理程序中处理它们。这个解决方案可以扩展到访问者无法扩展的地方。