Gee*_*eek 22 java jdbc service-provider effective-java
从Effective Java(第1项:考虑静态工厂方法而不是构造函数):
在编写包含该方法的类时,静态工厂方法返回的对象的类甚至不需要存在.这种灵活的静态工厂方法构成了服务提供者框架的基础,例如Java数据库连接API(JDBC).服务提供者框架是多个服务提供者实现服务的系统,并且系统使实现可用于其客户端,从而将它们与实现分离.
我特别不明白为什么这本书说的是静态工厂方法返回的对象的类在编写包含该方法的类时甚至不需要存在?有人可以解释使用JDBC作为示例.
Bru*_*eis 43
考虑以下内容:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,您的库无需了解服务的实现.您的库的用户必须设置一个系统属性,其中包含他们想要使用的实现的名称.
这就是你不理解的句子的意思:工厂方法将返回某个类的实例(该名称存储在系统属性"MyServiceImplementation"中),但它完全不知道它是什么类.所有它知道它实现MyService并且它必须有一个public,no-arg构造函数(否则,上面的工厂将抛出Error).
| 归档时间: |
|
| 查看次数: |
5313 次 |
| 最近记录: |