Java 实例的创建模式取决于多个子类实例
我有一个问题,因为我无法确定一个合适的设计模式 我想根据已传递给工厂方法的给定类型创建实例。到目前为止,我所做的工作如下:Java 实例的创建模式取决于多个子类实例,java,design-patterns,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 S
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);
}
}
对我来说,这似乎不是最好的做法
有人知道如何更好地解决这个问题吗
编辑:我收到的类不是我自己创建的,它是一个实例,它有几个子类,我根据传递的类型为这些子类创建新实例。在面向对象编程中,打开类型通常是通过多态性实现的,通过将create方法移动到
超类型
(可以为每个子类型
)或通过
编辑:如果不能更改类,则多态性将被删除。但幸运的是,该类似乎支持访问者模式(请参见它的
visit()
method),因此您仍然可以使用它。但是要使用多态性,我必须将我不希望的转换为实际的子类型。不,多态性不需要转换。抱歉,但是当我有一个方法create(SuperType)
和create(subtype)
(子类型扩展子类型
),您可以使用超类型x=。。。;对象。创建(x)代码>第一个方法将始终被调用…好吧,我会看看我能对访问者模式做些什么,尽管我从来没有真正理解过它…好吧,它有点工作,但我不喜欢我生成的代码。但我认为没有办法做得更好…传递的每个子类型是否恰好匹配一个返回类型?不,它取决于对象本身或某个程序状态中的多个参数。。。