用于限制返回对象的可用方法的Java设计模式

时间:2012-02-01 02:27:32

标签: java design-patterns inheritance

我是一名新的Java / OO程序员。我想创建一个方法(以下称为myMethod),它根据检查输入参数和状态来返回 n 类型的对象之一。世界。为简单起见,请在此处 n == 2 myMethod()可以返回FooBar类型的对象。

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的超类(或聚合?)或者Foo& Bar实现了一些通用接口,那么接收来自myMethod()的对象的客户端是否能够安全地在返回的对象上调用f()b(),而无需使用对象内省或铸造?

或者这个设计是一个反模式,是否有一个明显的重写,我错过了?感谢。

4 个答案:

答案 0 :(得分:1)

没有模式 - 你知道类型和铸造你不能做到这一点。

您必须将这些方法拉到公共接口或父类或转换。没有“模式”可以拯救你 - 这是一种神奇的想法。

答案 1 :(得分:0)

在我看来,您正在寻找的设计模式是 Factory 设计模式,这在OO范例中非常常用。您可以阅读有关此模式的更多信息here。我不完全确定你想要实现的目标,但我认为这种设计模式至少值得关注。

答案 2 :(得分:0)

在java中,您可以对接口进行隐式向上转换,但必须使用显式向下转换,否则您的java将无法编译。

答案 3 :(得分:0)

看起来你要做的就是非常接近反模式。

由于返回的对象类型取决于“世界状态”,您是否期望调用方法检查返回对象的确切类型,并根据类型行为不同?

我认为您需要坐下来,并尝试解释此设计的用例,然后我们可以帮助您找到更好的解决方案。