【发布时间】:2020-11-25 02:53:46
【问题描述】:
我有一组在其界面中不相关的 POJO(例如,一个可能存储一个 int 和一个 boolean,一个可能只存储一个 String,等等)。然而,它们在逻辑上属于同一组——它们是代表不同类型更新的对象,具有不同的数据模型,具体取决于特定的更新类型。我想收集这些“更新”对象并遍历它们,根据类以不同的方式处理每个具体事件。
我对如何解决这个问题的想法是使用访问者模式,但我不确定访问者模式是否可以/应该与不直接从同一个超类继承或实现公共接口的对象一起使用。是否有像下面这样的接口,其中唯一的统一因素是 accept 方法是一种有效的方法,还是有更适合这种情况的设计方法?然后我大概会有一个Collection<Update>,我会对其进行迭代。
public interface Update {
public void accept(UpdateVisitor visitor);
}
【问题讨论】:
-
如果您仍在寻找答案,您必须发布两到三个相关课程。从您模糊的描述中,我怀疑访问者是正确的解决方案。它解决了一个不同的问题。您只是要求多态性。在编写严肃的代码时,您应该始终依赖接口或抽象。在这种情况下,您必须将通用属性提取到接口并将通用行为提取到抽象类。或者,您必须将项目存储在
object类型的集合中,然后强制转换每个项目以使用它。不建议这样做。 -
@BionicCode 也许一个类似的更具体的例子是,如果我想为客户提供一种访问在特定时间段内发生的有序 REST API 请求集合的方法。 GET 请求对象可能具有与 POST 请求对象不同的字段。可能有一个客户端希望仅基于 GET 请求类型中的字段聚合列表,而忽略其他请求类型。也许另一个客户想要提取特定的 POST-request only 属性。似乎访客提供了这种灵活性。我不能将它们存储在单独的集合中,因为我需要保持顺序。
标签: java oop design-patterns visitor-pattern