美文网首页
1.1:考虑用静态工厂方法代替构造器

1.1:考虑用静态工厂方法代替构造器

作者: 洞妖洞妖01 | 来源:发表于2020-05-13 11:10 被阅读0次

      优先考虑静态工厂方法代替构造器

    优势(原因):

    ① 自定义名称(★★)

        构造器参数本身没有很好的确切描述返回的对象,客户端程序员不容易记住该用哪个构造器。但是静态工厂方法有名字,如:Module.SimpleModule(),可以明确知道得到一个默认的对象。

        【注意:若仅仅是替代构造器,比如重载方法 newInstance() 和 newInstance(int,int),则其实存在和构造器类似的问题,并无法体现静态工厂方法有名称的优异性】

    ②不必每次都创建新对象(★★★)

        相对于构造器每次都new一个对象,静态工厂方法可以使已经构建好的实例对象,例如:(1)Boolean.value(boolean),从不创建对象;(2) String,数据库连接池等享元模式。

        【注意:采用静态工厂方法返回相同的重复对象,应保证对象不可修改或不提供修改对象属性的方法(final无法保证对象属性不被修改)。参考String、Date、BigDecimal】

         不适用于JavaBean,即便是创建默认的空数据,也存在个别属性值不同。

    ③可以返回原返回类型的任何子类型的对象(多态)(★★★)

        API可以返回实现接口的对象,同时又不暴露对象的类(方便扩展)。

        【基于接口的框架,接口(非类)为静态工厂方法返回类型,因为接口不能有静态方法,按照惯例,接口Type的静态工厂方法被放在一个名为Type的不可实例化中的伴生类中(Collection和其伴生类Collections)。注意:返回的对象的实际类可以多种类型的】

    ④ 所返回的对象的类可以随着每次调用而发生变化,这取决与静态工厂方法的参数值:(★★)

        同3类似,返回的类型可以由方法自身决定,不需要暴露实际类型。

    ⑤方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在(★★★)

        典型:服务提供者框架(Service Provider Framework)的基础,例如JDBC API。

    相关文章

      网友评论

          本文标题:1.1:考虑用静态工厂方法代替构造器

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