Effective Java 第一条:考虑用静态工厂方法代替构造器

优势:

第一条:静态工厂方法有名称,可以从名字看出方法的作用,容易使用。

第二条:不必每次调用都创建一个新对象。

第三条:静态工厂方法可以返回原类型的任何子类型的对象。

第四条:在创建参数化类型的实例的时候,他们是代码变得更加简洁。

缺点:

第一条:类如果没有共有的或者受保护的构造器,就不能被子类化。

第二条:他们与其他的静态方法实际上没有任何区别。这样在API文档里难于查明如何实例化一个类。


一个简单实现:      

public interface Service{
                    
}
public interface Provider {
}
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(String name, Provider p){
        registerProvider(DEFAULT_PROVIDER_NAME);
    }
                    
    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();
    }
                    
}


Effective Java 第一条:考虑用静态工厂方法代替构造器,布布扣,bubuko.com

Effective Java 第一条:考虑用静态工厂方法代替构造器

上一篇:微信web页面返回刷新


下一篇:微信小程序_快速入门01