在有效的Java中( 第1项 : 考虑静态工厂方法而不是构造函数 ):
静态工厂方法返回的对象的类在编写包含该方法的类时甚至不需要存在。这种灵活的静态工厂方法构成了服务提供程序框架的基础,例如Java数据库连接API(JDBC)。服务提供者框架是一个系统,其中多个服务提供者实现了一项服务,并且该系统使实现可用于其客户端,从而将它们与实现分离。
我特别不明白为什么书说的是静态工厂方法返回的对象的类在编写包含该方法的类时甚至不需要存在?有人可以用JDBC为例进行说明。
考虑如下内容:
public interface MyService { void doSomething(); } public class MyServiceFactory { public static MyService getService() { try { (MyService) Class.forName(System.getProperty("MyServiceImplemetation")).newInstance(); } catch (Throwable t) { throw new Error(t); } } }
使用此代码,您的库无需了解服务的实现。库的用户必须设置一个系统属性,其中包含他们要使用的实现的名称。
这就是您不理解的句子的意思:factory方法将返回某个类的实例(其名称存储在系统属性“ MyServiceImplementation”中),但绝对不知道它是什么类。它所知道的就是它实现了MyService,并且必须有一个公共的,无参数的构造函数(否则,上面的工厂将抛出Error)。
MyService
Error