静态工厂方法与设计模式中的工厂方法模式不同,和设计模式中的工厂方法模式不直接对应。

使用静态工厂方法比构造器的优势

第一、静态工厂方法是有名称的,而构造器是通过参数判断的。

每个静态工厂方法都有自己的名字,可以根据名称就可以判断它要做什么事情,而构造器是做不到的。

如:构造器BigInteger(int,int),返回BigInteger可以是素数,偶数等,而用名称BigInteger。probalePrime的静态工厂方法

就一目了然了,代码容易阅读。

第二、不必再每次调用时候都创建一个新的对象。

一个类预先构建一个实例,缓存起来,进行重复利用,避免不必要的重复对象。

实例的受控是的不可变类确保是一个Singleton或者是一个不可实例化的,使得不可变类可以保证不会存在两个相等的实例,

即a==b的时候才有a.equal(b)为TRUE。若果保证了这点就可以使用a==b代替a.equal(b),提升了性能。

第三、可以返回原类型的任何子类型的对象,这个都很容易理解,

第四、创建参数化类型实例时,代码更简洁。

在java8之前,遗憾的是,在调用参数化类型构造器时,即使类型参数很明显,也必须指明。如:

Map<String> map=new HashMap<String>();

两次指明泛型类型,要是泛型变的更复杂,就多写了很多代码。

而使用静态工厂方法的实现就简洁很多了:

public static<K,V>  HashMap<K,V> newInstance() {

return newHashMap<K,V>();

}//这段代码可以复用

Map<K,V> map=HashMap.newInstance();

不过,什么事情都不是完美的,静态工厂方法也有它的缺点

1、类如果不含有公有的或者受保护的构造器,就不能被子类化。

也就是说,你不能把类的任何方便的实现类子类化,这是不可能的。

2、它和静态方法实际上没有任何区别。

因此,对于提供了静态工厂方法而不是构造器的类来说,要想查明如何实例化一个类,是很困难的。

总之,静态工厂方法和公有构造器各有优势,我们只需了解他们的特性,各取所需,通常情况下,不要第一反应就提供

公有的构造器,不妨考虑试试静态工厂。

【代码优化】考虑使用静态工厂方法代替构造器相关推荐

  1. 用静态工厂方法代替构造器

    1.静态工厂方法与构造器不同的第一大优势在于,它们有名称.如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读.例如,构造器Bigin ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 8.0系统安装Xposed框架失败Xposed framework version XX is installed
  2. 会为客户着想的商家才是好商家
  3. Go如何按行读取文本
  4. SVT-AV1:开源编解码最新进展
  5. 二叉树,建树,前序,中序,后序,递归 非递归
  6. 将结构体数据存储到一段字符串string中
  7. linux配置sftp-server,Ubuntu Server如何配置SFTP(建立用户监狱)
  8. 数据库存储时间的时区问题
  9. java中使用QBC的好处_使用QBC的方式应用多对多关系中的查询
  10. wincc7的常用c语言,wincc几个常用c语言编程-20210324073153.docx-原创力文档
  11. 研究自动驾驶技术的算法需要哪些知识?
  12. 安装VMware+linux+oracle手记
  13. 孙玄/陈东:聊一聊ZooKeeper的顺序一致性
  14. 使用ildasm反编译修改c# dll
  15. 新巴塞尔资本协议(中英文)
  16. 企业微信批量添加好友
  17. unity 刚体的运动 减速运动
  18. No valid crumb was included in the request
  19. 3.27 期货每日早盘操作建议
  20. 学法语的你伤不起之吐槽各种语言

热门文章

  1. 【完全背包】自然数拆分Lunatic版
  2. linux crontab怎么启动,【linux之crontab,启动】(示例代码)
  3. java添加录音,大家说说java程序里怎么插入视频和音频啊
  4. 看完不后悔系列,SQL语句执行慢怎么办,原因总结!!
  5. 第一台全自动电子计算机,关于世界上第一台电子计算机ENIAC的叙述错误的是() senny全自动微电脑水位控制仪...
  6. 计算机基础第五章知识,计算机基础第5次作业-第五章-Powerpoint知识题
  7. 一些抄来的冷知识...
  8. Android Studio 创建/打开项目时一直处于Building“project name”Gradle project info 的解决...
  9. Cleaner Robot - CodeForces 589J(搜索)
  10. 格式化输出函数(2): FormatDateTime