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

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

优势(原因):

① 自定义名称(★★)

    构造器参数本身没有很好的确切描述返回的对象,客户端程序员不容易记住该用哪个构造器。但是静态工厂方法有名字,如: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:考虑用静态工厂方法代替构造器)