静态工程方法四大优势
单例
, 无法实例化
, 等等其他一些定制实例化需求
接口的框架
, 可以隐藏具体的实现类 java.util.EnumSet
的静态构建方法根据入参不同, 如<=64, 则返回 RegalarEumSet
实例, 否则返回 JumboEnumSet
实例 Map<String, List<String>> m = new HashMap<String, List<String>>();
, 使用静态工程方法可以写成 public static <K, V> HashMap<K, V> newInstance(){ return new HashMap<K, V>(); }
, 客户端调用的时候可以写成 Map<String, List<String>> m = HashMap.newInstance();
// Service interface 服务接口
public interface Service{
}
// Service provider interface 服务提供者
public interface Provider{
ServicenewService();
}
public class Services{
private Services(){}
private static final Map<String, Provider> providers = new ConcurrentHashMap<String, Provider>();
public static final String DEFAULT_PROVIDER_NAME = "<def>";
//Provider registration API 提供者注册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 服务访问API
public static Service newInstance(){
return new Instance(DEFAULT_PROVIDER_NAME);
}
public static Service newInstance(String name){
Provider p = providers.get(name);
if (p=null) throw ....
return p.newService();
}
}
静态工程方法俩大缺点
复合(composition), 见16条
惯用名称
来显示的标出, 比如 getInstance, newInstance