美文网首页
Effective Java笔记 - 1. 静态工厂方法

Effective Java笔记 - 1. 静态工厂方法

作者: rockops | 来源:发表于2017-03-31 22:21 被阅读12次

    1. 考虑用静态工厂方法代替构造器

    静态工厂方法的几个优点

    1. 静态工厂方法有名称,可以清晰地知道创建的对象是什么,如果一个类的构造方法有很多个参数,并且有多个构造方法,那使用有名称的静态工厂方法会让用户更容易理解创建的是什么对象。
    2. 不用在每次调用他们的时候都创建一个新的对象。对于创建销毁对象成本很高的类,或者对象可以重复利用的话,那么使用静态工厂方法可以在不创建新对象的前提下满足需求。
    3. 静态工厂方法可以返回原返回类型的任何子类型对象。对于抽象类,或者接口,你没有办法直接new class,而需要知道所有子类型。使用静态工厂方法可以屏蔽子类的实现。
    4. 在创建参数化类型实行的时候,可以让代码更简洁,我们都知道在使用构造方法来创建对象的时候,通常需要这么写Map<String, List<String>> m = new HashMap<String, List<String>>;。而如果你用了静态工厂方法,就可以简化成这个样子
    public static <K, V> HashMapFactory<K, V> newInstance() {
        return new HashMap<K, V>();
    }
    
    Map<String, List<String>> m = HashMapFactory.newInstance();
    

    静态工厂方法的缺点:

    1. “类如果不含有public/protected 构造器,就不能被子类化” 没明白啥意思,拗口。
    2. 静态工厂方法跟普通的静态方法没有任何区别。不过这个也无所谓啦。可以通过一些约定俗成的命名来感知静态工厂方法。通常有以下几种命名方法
    valueOf()
    getInstance()
    newInstance()
    getType(), 这个不太好理解
    newType(), 这个不太好理解
    

    大部分情况下,这两种方法都可以实现,但需要理解这两者的区别,用合适的。

    相关文章

      网友评论

          本文标题:Effective Java笔记 - 1. 静态工厂方法

          本文链接:https://www.haomeiwen.com/subject/scjbottx.html