我是一名新的 Java/OO 程序员。我想创建一个方法(下面称为 myMethod
),它根据检查输入参数和世界状态返回 n 类型的对象之一。为了简单起见,在这里说n == 2:myMethod()
可以返回任一类型 Foo
的对象或Bar
。
Foo 和 Bar 有不同的方法可供调用,有些是专有的,有些是共同的,例如:
ReturnType? myMethod(inputs) {
if (/*examining state of world & inputs implies a Foo*/)
return new Foo();
return new Bar();
}
...
public class Foo {
public Foo() {}
public void x() {...} //common to Bar
public void f() {...}
}
public class Bar {
public Bar() {}
public void x() {...} //common to Foo
public void b() {...}
}
我应该使用什么设计模式myMethod()
,对于 Foo 和 Bar 类?如果我的方法的返回类型是 Foo 和 Bar 的父类(super class)(或聚合?),或者 Foo 和 Bar 实现一些公共(public)接口(interface),那么对于从 myMethod()
接收对象的客户端有没有办法?能够安全地调用f()
或b()
在返回的对象上而不需要使用对象内省(introspection)或转换?
或者这个设计是反模式吗?我是否缺少明显的重写?谢谢。
最佳答案
没有模式 - 你无法在了解类型和类型转换的情况下做到这一点。
您必须将这些方法拉到公共(public)接口(interface)或父类或强制转换。没有任何“模式”可以拯救你 - 这是神奇的思维。
关于用于限制返回对象的可用方法的 Java 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089920/