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

标签 java design-patterns inheritance

我是一名新的 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/

相关文章:

java - 如何在不使用HTML anchor (一)标签的情况下实现 "Open Link in new Tab"

angular - 带有 Angular 和 Typescript 的策略模式

javascript - 如何确保一个变量是一个对象

java - EJB 无状态 session bean 内的 CDI bean 生产者

java - 维基百科用于其版本比较功能的算法是什么

java - 在Java中扩展类而不初始化

java - 使用自定义转换器映射对象类型

c++ - 如何让子类在 C++ 中返回一个不太通用的 typedef?

Java (Android) : Ive created a bunch of views using a loop, 并希望删除其中之一

java - 您可以将对象强制转换为它未显式实现的接口(interface)吗?