实例的创建模式取决于多个子类实例

时间:2014-06-01 09:08:25

标签: 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的一个实例,它有几个子类,我根据传递的类型创建新的实例。

1 个答案:

答案 0 :(得分:1)

在面向对象编程中,通常通过将create方法移动到SuperType(可以为每个Subtype覆盖它)或通过{{3来实现 - 通过多态来实现类型的切换。 }}

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