java - Java 工厂模式的返回类型

标签 java javadoc factory-pattern

这可能是一个非常基本的问题,有一个非常明显的答案,但我很难弄清楚这一点。

java工厂模式中涉及到的如何知道类的方法的返回类型。例如,查看下面的代码...方法调用的返回类型是什么以及如何正确转换它...以及如何为类编写 javadoc。

我正在尝试编写一个库,然后用户可以将其插入到他们的项目中...

我有一个界面

public interface myInterface
{
     public Object doA();
     public Object doB();
}

具体类如下

public class concerete1 implements myInterface
{
public concerete1() {
}

@override
public Object doA()
{ return new String("Hello"); }

@override
public Object doB()
     { return "hello".getBytes(); }

}

public class concerete1 implements myInterface
{
public concerete2() {
}

@override
public Object doA()
{ return "hello".getBytes(); }

@override
public Object doB()
{ return new String("Hello"); }

}

我的工厂类如下

public class factory
{
     private myInterface mi;

     public myInterface actionProducer(String choice)
     {
           switch(choice)
           {
           case "a":
                 mi = new concerete1();
                 break;
           case "b":
                 mi = new concerete2();
                 break;
           }
           return mi;
     }
}

我的测试运行程序类如下

String result = factory.actionProducer("a").doA();

最佳答案

您不必显式测试工厂方法返回值的动态类型。静态类型应该告诉您需要知道的所有信息。这意味着返回类型应该尽可能具体,以告诉您可以对该对象执行哪些操作。例如,制作不同实现的 map 的工厂方法应返回 Map:

public interface MapFactory {
    public Map makeMap();
    ...
}

无论MapHashMap还是TreeMap还是ConcurrentSkipListMap,您都可以使用Map 与其交互的方法。如果您需要调用 ceilingKey(它不是 Map 方法),则说明存在设计问题。

在您的情况下,您的工厂方法没有任何意义,因为没有比 Object 返回更具体的类型,并且除了 Object 的 API 之外,您无法对返回值执行任何操作。更合理的工厂会返回可以以相同方式交互的对象,而不管对象是如何实现的。

关于java - Java 工厂模式的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198215/

相关文章:

eclipse - Eclipse 中带有 JavaDoc 的 Java 反编译器插件

javadoc - Filenet P8 如何附加 jace.jar 的 Javadoc

python - 我应该将 MyClass.__init__ 构造函数传递给工厂方法吗?

java - 从 AsyncTask 的 onPostExecute() 将自定义 View 添加到布局后未恢复自定义 View

Java自定义组件像素颜色

eclipse - 如何增加 Ant 'Javadoc' 任务的内存?

oop - 为什么 Haskell 不需要工厂模式?以及在 Haskell 中,OOP 中的模式解决的需求是如何解决的?

java - Tomcat 9 和网络套接字。出现 404 错误。我的代码有什么问题?

java - 用于 Java 5 的 Selenium 的最新版本是什么?