相关概念
静态工厂方法:就是返回当前类的实例的静态方法。
特点: 1.public static 修饰;2.返回值为当前类的对象。
举例:
//String类中的静态工厂方法:
public static String valueOf(boolean value) {
return value ? "true" : "false";
}
//Boolean类中的静态工厂方法:
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
静态工厂方法较与构造器的优势
1.静态工厂方法有名称,构造器没有。
2.静态工厂方法不必在每次调用方法的时候,创建新对象。
3.静态工厂方法可以返回原返回类型的任何子类型的对象。
/**
* 服务 接口
*/
public interface Service {
}
/**
* 提供服务 接口
*/
public interface Provider {
Service newService();
}
public class Services {
/**
* 构造器 私有
*/
private Services() {
}
private static final Map<String, Provider> providers = new HashMap<>();
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 registered with name:" + name);
return provider.newService();
}
}
4.静态工厂方法在创建参数化类型实例的时候,代码更加简洁。
静态工厂方法的缺点
1. 类如果不含有公有的(public)或者受保护的(protected)构造器,就不能被子类实例化。