public static Boolean valueOf(boolean b){
return b ? Boolean.TRUE : Boolean.FALSE;
}
Advantages:
1、静态工厂方法不像构造方法,他可以有自己的名字。 静态方法和静态工厂方法没什么不同,只是静态工厂方法使用的场景是产生实例,类的对象。
2、每次调用的时候,不必都生产新的对象
3、不像构造函数,静态工厂方法可以返回任何子类。
// Service provider framework sketch
// Service interface
public interface Service {
... // Service-specific methods go here
}
// Service provider interface
public interface Provider {
Service newService();
}
// Noninstantiable class for service registration and access
public class Services {
private Services() { } // Prevents instantiation (Item 4)
// Maps service names to services
private static final Map<String, Provider> providers =
new ConcurrentHashMap<String, Provider>();
public static final String DEFAULT_PROVIDER_NAME = "<def>";
// Provider registration API
public static void registerDefaultProvider(Provider p) {
registerProvider(DEFAULT_PROVIDER_NAME, p);
}
public static void registerProvider(String name, Provider p){
providers.put(name, p);
}
// Service access API
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();
}
}
4、创建有参数类型的实例时,减少冗余度。
public static <K, V> HashMap<K, V> newInstance(){
return new HashMap<K, V>();
}
Disadvantages:
1、静态工厂方法不能是private \ protected
2、静态工厂方法和静态放大其实没有什大的不同。注意命名规范,让client一看就知道方法的用途。