我有一个问题,因为我无法确定合适的设计模式。
我想根据已传递给工厂方法的给定类型创建实例。到目前为止我正在做的事情如下:
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/