您的位置:首页 > Web前端

Effective Java 第一条:考虑用静态工厂方法代替构造器

2014-04-14 15:05 561 查看
优势:

第一条:静态工厂方法有名称,可以从名字看出方法的作用,容易使用。
第二条:不必每次调用都创建一个新对象。
第三条:静态工厂方法可以返回原类型的任何子类型的对象。
第四条:在创建参数化类型的实例的时候,他们是代码变得更加简洁。
缺点:
第一条:类如果没有共有的或者受保护的构造器,就不能被子类化。
第二条:他们与其他的静态方法实际上没有任何区别。这样在API文档里难于查明如何实例化一个类。

一个简单实现:
public interface Service{

}
public interface Provider {
}
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(String name, Provider p){
registerProvider(DEFAULT_PROVIDER_NAME);
}

public static void registerProvider(String name, Provider p) {
providers.put(name, p);
}
public static Service newInstance() {
return newInstance(DEFAULT_PROVIDER_NAME);
}
public static Service newInstance(String name) {
Provider p = providers.get(name);
if(p == null)
throw new IllegalArgumentException(
"No provider registered with name: " + name);
return p.newService();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: