1、静态工厂方法与构造器不同的第一大优势在于,它们有名称。如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读。例如,构造器Biginteger (int , int, Random )返回的Biginteger 可能为素数,如果用名为B 工ginteger.probablePrime 的静态工厂方法来表示,显然更为清楚。

2、一个类只能有一个带有指定签名的构造器。编程人员通常知道如何避开这一限制: 通过提供两个构造器,它们的参数列表只在参数类型的顺序上有所不同。实际上这并不是个好主意。面对这样的AP I , 用户永远也记不住该用哪个构造器, 结果常常会调用错误的构造器。并且在读到使用了这些构造器的代码时,如果没有参考类的文档,往往不知所云。由于静态工厂方法有名称,所以它们不受上述限制。当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器,并且仔细地选择名称以便突出静态工厂方法之间的区别。

3、静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象

4、静态工厂方法与构造器不同的第三大优势在子,它们可以返回原返回类型的任何子类型的对象

5、静态工厂的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值

6、静态工厂的第五大优势在于,方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在

缺点

1、静态工厂方法的主要缺点在子,类如果不含公有的或者受protected的构造器,就不能被子类化

2、静态工厂方法的第二个缺点在于,程序员很难发现它们

from一一类型转换方法,它只有单个参数,返回该类型的一个相对应的实例,

例如:Dated= Date . from(instant) ;

of — —聚合方法,带有多个参数,返回该类型的一个实例,把它们合并起来,例如:

Set<Rank> faceCards = EnumSet. of (JACK , QUEEN, KING];

valueOf一一比from 和of 更烦琐的一种替代方法,例如:

Biginteger prime = Biginteger.valueOf(Integer.MAX_VALUE);

instance 或者get Instance一-返回的实例是通过方法的(如有)参数来描述

的,但是不能说与参数具有同样的值,例如:

StackWalker luke = StackWalker.getinstance(options);

create 或者newInstance一一才象instance 或者getinstence 一样,但create

或者newInstance 能够确保每次调用都返回一个新的实例,例如:

Object newArray = Array.newInstance(classObject, arrayLen );

getType一像getInstance 一样,但是在工厂方法处于不同的类中的时-候使用。Type 表示工厂方法所返回的对象类型,例如:

FileStore fs = Files.getFileStore(path];

D newType一象newInstance 一样,但是在工厂方法处于不同的类中的时候使用

BufferedReader br 「= Files.newBufferedReader( path);

用静态工厂方法代替构造器相关推荐

  1. 静态工厂方法代替构造器实例_静态工厂方法与传统构造方法

    静态工厂方法代替构造器实例 之前,我已经讨论过一些关于Builder模式的信息 , Builder Pattern是一种有用的模式,用于实例化具有几个(可能是可选的)属性的类,这些属性可以使读取,编写 ...

  2. 01、静态工厂方法替代构造器

    考虑用静态工厂方法替代构造器 考虑使用静态工厂方法来替代构造器的原因: 静态工厂方法有名称:普通的构造器中,参数并不能很好地描述返回对象的特点,代码的阅读性不好. 考虑下面的程序: Random ra ...

  3. Java九十条经验法则之第一条:用静态工厂方法代替构造器

    一.用静态工厂方法代替构造器的优势 1.静态构造方法与构造器不同的第一大优势在于,他们有名称,而构造器名字相同,容易混淆,例如: 使用静态构造方式的方式,我们就可以通过知道产生的是什么样类型的对象,而 ...

  4. 第1条:考虑采用静态工厂方法代替构造器

    第1条:考虑采用静态工厂方法代替构造器 第1条:考虑采用静态工厂方法代替构造器 对类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个公有的构造器.还有一种应该被程序员重视的方法:类提供 ...

  5. java 静态工厂方法代替构造器的好处

    Java 的静态工厂方法 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第 ...

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

    转载链接:https://www.jianshu.com/p/ceb5ec8f1174 1.序:什么是静态工厂方法 在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来 ...

  7. 《Effective Java》学习笔记 - (1) 使用静态工厂方法代替构造器

    文章目录 前言 使用静态工厂方法代替构造器 1. 优点 1.1 静态工厂方法有名称 1.2 不必每次调用的时候都创建一个对象 1.3 可以返回类型的任何子类型的对象 1.4 所返回的对象的类型可以随着 ...

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

    为了获得一个类的实例,有两种办法1.类提供一个公有的构造器 2.类提供一个公有的静态工厂方法. 静态工厂方法的优势: 1.有名称. 慎重地选择方法名称能突出多个构造器的区别,例如使用BigIntege ...

  9. 一起读经典-《Effective Java》1.1 考虑使用静态工厂方法代替构造器

    1.静态工厂方法相较于构造器的优点 a.静态工厂方法能够自定义名称,使代码可读性更高 b.不必在每次调用的时候都创建新的实例 c.可以返回类型的子类型对象 2.静态工厂方法的常用名称: value o ...

最新文章

  1. 内存都没了,还能运行程序?
  2. C++输入输出运算符重载(“”“”)
  3. java小程序死机_求解,刚写的小程序,一运行我机器就死机
  4. java项目教训_[免费电子书]分析超过600,000个Java项目的经验教训
  5. 【渝粤教育】国家开放大学2018年秋季 0508-21T影视特技及后期合成 参考试题
  6. 【渝粤题库】陕西师范大学800004 遥感概论
  7. 前端模板引擎artTemplate---高性能JavaScript模板引擎
  8. 字节跳动将推出汽车云业务,计划2025年追赶腾讯
  9. Windows Mobile 获取来电号码和屏蔽来电
  10. JavaWeb基于session和cookie的数据共享
  11. 在Ubuntu中下载github上的文件
  12. 两平面平行方向向量关系_线性代数总结 第三章 向量代数与几何计算(空间平面和直线)...
  13. 如何键盘锁定计算机,如何锁定电脑键盘或鼠标防止误操作
  14. 基于物联网的防盗报警器设计与实现
  15. Camera幻灯片参数设置
  16. Angular真有React开发人员讲得那么差劲?
  17. Linux定时器和时间管理
  18. 使用ps制作端午海报
  19. 王者荣耀服务器维护公告5月8号,王者荣耀5月8日更新维护公告 5.8更新了什么
  20. RFID在市场上的兴起:谁是赢家,谁是输家?

热门文章

  1. python程序的基本框架_Python PyQt学习随笔:PyQt主程序的基本框架
  2. lol战绩查询接口_大聪明,3000元配置一台能畅玩LOL、CF、DNF的腾讯全家桶电脑,该怎么办?——12.10更新...
  3. c#sort升序还是降序_被玩坏的数组排序之sort函数
  4. C语言中malloc函数产生的内存泄漏问题
  5. Python 生成器(yield)
  6. 坚果云feodra(linux)启动失败
  7. c++17(22)-reinterpret_cast和new动态空间内存申请
  8. python3精要(29)-reduce
  9. 【Python】分享几个用Python给图片添加水印的方法,简单实用
  10. 摊牌了,我靠他实现了NLP模型使用入门