用静态工厂方法替代构造器 《Effective Java》读书笔记

什么是静态工厂方法?

通过
1.className.getInstance();
2.className.newInstance();
3.className.valueOf();
等静态方法获得对象实例。
而一般我们会直接采用
new className(param1,param2)即构造器的方法来得到实例

静态工厂方法相比于构造器的优势

1.静态方法有名称

构造器并没有确切描述返回的对象,而适当名称的静态工厂方法可以有更佳的可读性。

2.静态工厂方法可以采用单例模式等限制对象数量

静态方法返回的对象可以是 new className(),也可以是已经有的对象。

3.静态工厂方法可以返回类型的任何子类型

样例代码

public interface Service{
\\some function
}
public interface Provider{
    Service newService();
}
public class Services{
    private Services(){};
    private static final Map<String,Provider> providers = new ConcurrentHashMap<String,Provider>();
    //provider register 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
    public static Service newInstance(){
        return newInstance(DEFAULT_PROVIDER_NAME);
    }
    public static Service newInstance(String name){
        Provider p = provider.get(name);
        if(p==null){
            throw new IllegalArgumentException(
                "No Provider registered with name:"+name);
        return p.newService();
    }

}

4.在创建参数化实例的时候,代码更简洁

代码:

Map<String,Integer> map = new HashMap<String,Integer>();
//对比
public static <K,V> HashMap<K,V> newInstance(){
    return new HashMap<K,V>();
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq951127336/article/details/79965996
文章标签: java 读书笔记
个人分类: java-算法 Java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭