考虑如下内容:
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
)。