美文网首页
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,考虑用静态工厂方法代替构造器 切忌第一反应就是提供共有构造器,而不先考虑静态工厂。 类可以通过静态工厂方法返回...

  • effecitveJava读书笔记

    1.创建与销毁对象 1.1考虑用静态工厂方法代替构造器 这里的静态工厂不是我们说设计模式中静态工厂方法模式;可以理...

  • Effective Java 第二章笔记

    创建和销毁对象时 1. 考虑用静态工厂方法代替构造器 1.1 优点 静态工厂方法有名称 不必重复创建新对象 可以返...

  • effective java读书笔记

    一、考虑用静态工厂方法代替构造器1.静态工厂方法有名称,而构造器只能是类名 private Map > map =...

  • effective java学习笔记 原则1:考虑用静态工厂方法

    原则1:考虑用静态工厂方法代替公有构造器 提供实例的方式:静态工厂方法(非设计模式中的静态工厂模式)公有构造器ne...

  • Java创建和销毁对象

    考虑用静态工厂方法代替构造器 静态工厂方法可以通过静态获取类的一个实例,而不需要通过构造器; 使用静态工厂方法的优...

  • java编程建议系列一

    1.考虑用静态工厂方法代替构造器 静态工厂方法惯用名称 valueOf —— 类型转换方法 of —— value...

  • 第一条 考虑用静态工厂方法代替构造器

    创建和销毁对象 考虑用静态工厂方法代替构造器 一般使用构造器 使用静态方法 这样写的优势 静态方法有名字构造器与类...

  • Effective Java--(1)创建和销毁对象

    1 考虑用静态工厂方法代替构造器 例如如下方法: 静态工厂方法和构造器都各有长处,我们需要理解各自长处,做出合适的...

  • 如何做到写出高效的Java代码?

    timg.jpeg 考虑用静态工厂方法代替构造器遇到多个构造器参数时要考虑用构建器用私有构造器或者枚举类型强化Si...

网友评论

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

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