From (Item 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);
}
}
}
使用此代码,您的图书馆不需要了解服务的实现。库的用户必须设置一个系统属性,其中包含他们想要使用的实现的名称。
这就是你不明白的那句话的意思:工厂方法将返回某个类的实例(该类的名称存储在系统属性“MyServiceImplementation”中),但它完全不知道它是什么类。它所知道的只是它实现了MyService
并且它必须有一个公共的、无参数的构造函数(否则,上面的工厂将抛出一个Error
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)