“静态工厂返回的对象不需要存在”是什么意思?

时间:2018-11-10 15:50:21

标签: java

在阅读“有效的Java”时,J.Bloch遇到了该语句

  

静态工厂的第五个优点是,编写包含该方法的类时,不需要存在返回对象的类。

是什么意思?有人可以举例说明吗?

1 个答案:

答案 0 :(得分:2)

这意味着您的静态工厂方法的API可以返回一个接口类型,该接口类型的实现要到以后才能编写或生成。

例如:

public static MyInterface getMyInterfaceInstance() {
    //load instance dynamically and return it.
}

在这种情况下,工厂方法在编译时仅需要存在MyInterface接口。可以通过多种方式在运行时动态加载实际的实现,包括:

  • 创建代理对象
  • 反射(在运行时加载的可配置实现类名称)
  • 查找service loader

特别是,最后两个选项只是意味着可以将实现类写在不同的模块中(许多模块可以提供该接口的实现),并且这些实现类将在运行时被发现-这样就可以以便在实际实现类之前编写静态工厂方法。