java - 依赖于多个子类实例的实例创建模式

标签 java design-patterns

我有一个问题,因为我无法确定合适的设计模式。

我想根据已传递给工厂方法的给定类型创建实例。到目前为止我正在做的事情如下:

T create(SuperType x) {
  if (x instanceof SubType1) {
    // do some stuff and return a new SubType extends T
  } else if (x instanceof SubType2) {
    // do some stuff and return a new SubType extends T
  } else if ...

  } else {
    throw new UnSupportedOperationException("nothing defined for " + x);
  }
}

这对我来说似乎不是最好的做法。

有人知道如何更好地解决这个问题吗?

编辑:我收到的类不是我自己创建的,它是 http://wala.sourceforge.net/javadocs/trunk/com/ibm/wala/ssa/SSAInstruction.html 的实例它有几个子类,我根据传递的类型为其创建新实例。

最佳答案

在面向对象的编程中,类型的切换通常通过多态性来实现,可以通过将 create 方法移至 SuperType(可以为每个 Subtype 覆盖它)或通过 visitor pattern .

编辑:如果你不能改变类,多态性就过时了。但幸运的是,该类似乎支持访问者模式(请参阅它的 visit() 方法),因此您仍然可以使用它。

关于java - 依赖于多个子类实例的实例创建模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23978289/

相关文章:

java - 相当于 JUnit5 的 @RunWith(JUnitPlatform.class)

java - 使用 jFreeChart 的多个图形中的多个图形

java - 在 Android 的 MVP 设计模式中,我们在哪里放置业务登录?

c# - 是否可以使对象公开类型参数的接口(interface)?

大型项目的 Java 依赖管理

java - 是否可以更轻松地检查方法是否被父类(super class)覆盖?

java正则表达式对于多个组失败

java - 在 Java 工作流上使用哪种设计模式

java - 如果我只有几个状态,状态模式可能会有帮助吗?

dependency-injection - 依赖注入(inject)与工厂模式