美文网首页
1. 考虑使用静态工厂方法代替构造方法 2019-11-08

1. 考虑使用静态工厂方法代替构造方法 2019-11-08

作者: 孙广明 | 来源:发表于2019-11-08 17:41 被阅读0次

    1. 静态工厂方法例子:

    如Boolean类中的valueOf(boolean b) 方法

    /**
     * The {@code Boolean} object corresponding to the primitive
     * value {@code true}.
     */
    public static final Boolean TRUE = new Boolean(true);
    
    /**
     * The {@code Boolean} object corresponding to the primitive
     * value {@code false}.
     */
    public static final Boolean FALSE = new Boolean(false);
    
    //...中间代码省略
    
    //静态工厂方法
    @HotSpotIntrinsicCandidate
    public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }
    

    注意:
    静态工厂方法与工厂方法模式不同,类可以直接提供静态工厂方法,而不是公共的构造方法。

    2. 使用静态工厂方法代替构造方法的优缺点

    2.1 优点

    (1). 静态工厂方法不像构造方法,它们是有名字的。(属于类的方法)
    (2). 静态工厂方法与构造方法不同,他们被调用时不需要每次都创建一个对象。例如调用Boolean.valueOf(true)方法,返回的是Boolean类中定义的静态不变属性TRUE对象;
    (3). 静态工厂方法与构造方法不同,他们可以返回任意对象,构造方法只能返回当前类的对象。
    (4). 静态工厂方法返回对象的类可以根据输入类型不同而不同。例如使用泛型。
    (5). 在编写该方法的类时,返回的对象的类不需要存在。(static关键字的作用)

    2.2 缺点

    (1). 只提供静态工厂方法、没有提供公共或者受保护的构造方法时不能被子类化。(主要限制)
    (2). 静态工厂方法并不像构造方法那样突出、不容易被程序员阅读。

    2.3 总结

    静态工厂方法和公共构造方法都有他们的用途,并且了解他们的相对有点时值得的。通常,静态工厂方法更可取,因此避免在没有考虑静态工厂方法的情况下、提供公共构造方法。

    相关文章

      网友评论

          本文标题:1. 考虑使用静态工厂方法代替构造方法 2019-11-08

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