Effective In Java 笔记之创建和销毁对象
创建对象时, 应该优先选用静态工厂方法,其具有以下几个优势:
1. 静态工厂方法与构造器不同之一在于静态工厂方法有名字。
2. 静态工厂方法与工早起不同之二在于静态工厂方法不必在每次调用他的时候都创建一个新的对象。
3. 静态工厂方法与工早起不同之三在于静态工厂方法可以返回该类的任何子类对象。
interface Service {// specify methods go here}interface Provider {Service newService();}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(Provider p) {registerProvider(DEFAULT_PROVIDER_NAME, p);}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();}}class MyHashMap<K,V>{public static <K,V> HashMap<K,V> newInstance(){return new HashMap<K,V>();}public static void main(String[] args){Map<String, List<String>> m = MyHashMap.newInstance();}}