我有一个问题,因为我无法确定合适的设计模式。
我想根据传递给工厂方法的给定类型创建实例。到目前为止我所做的是以下内容:
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的一个实例,它有几个子类,我根据传递的类型创建新的实例。
答案 0 :(得分:1)
在面向对象编程中,通常通过将create方法移动到SuperType
(可以为每个Subtype
覆盖它)或通过{{3来实现 - 通过多态来实现类型的切换。 }}
编辑:如果你不能改变类,那么多态性就会消失。但幸运的是,该类似乎支持访问者模式(请参阅它的visit()
方法),因此您仍然可以使用它。