/**
* 第1条:考虑用静态工厂方法代替构造器
* 优点:
* 1.静态工厂方法有名称;
* 2.不必每次调用的时候都创建一个新的对象
* 3.可以返回类型的任何子类型的对象
* 4.在创建参数化类型实例的时候,使代码更加简洁
* 缺点:
* 1.类如果不含有共有的或者受保护的构造器,就不能被子类化
* 2.与其他的静态方法实际上没有任何区别
*
*/
public class Services {
private Services() {}
private static final Map<String, Provider> providers = new ConcurrentHashMap<String, Provider>();
public static final String DEFAULT_PROVIDER_NAME = "<def>";
public static void registerDefaultProvider(Provider provider) {
registerProvider(DEFAULT_PROVIDER_NAME, provider);
}
public static void registerProvider(String name, Provider provider) {
providers.put(name, provider);
}
public static Service newInstance() {
return newInstance(DEFAULT_PROVIDER_NAME);
}
public static Service newInstance(String name) {
Provider provider = providers.get(name);
if(provider == null)
throw new IllegalArgumentException("No provider register with name: " + name);
return provider.newService();
}
}
public interface Provider {
Service newService();
}
public interface Service {
}