静态工程方法四大优势
单例
, 无法实例化
, 等等其他一些定制实例化需求
接口的框架
, 可以隐藏具体的实现类 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