【代码优化】考虑使用静态工厂方法代替构造器
静态工厂方法与设计模式中的工厂方法模式不同,和设计模式中的工厂方法模式不直接对应。
使用静态工厂方法比构造器的优势:
第一、静态工厂方法是有名称的,而构造器是通过参数判断的。
每个静态工厂方法都有自己的名字,可以根据名称就可以判断它要做什么事情,而构造器是做不到的。
如:构造器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.静态工厂方法与构造器不同的第一大优势在于,它们有名称.如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读.例如,构造器Bigin ...
- 静态工厂方法代替构造器实例_静态工厂方法与传统构造方法
静态工厂方法代替构造器实例 之前,我已经讨论过一些关于Builder模式的信息 , Builder Pattern是一种有用的模式,用于实例化具有几个(可能是可选的)属性的类,这些属性可以使读取,编写 ...
- 01、静态工厂方法替代构造器
考虑用静态工厂方法替代构造器 考虑使用静态工厂方法来替代构造器的原因: 静态工厂方法有名称:普通的构造器中,参数并不能很好地描述返回对象的特点,代码的阅读性不好. 考虑下面的程序: Random ra ...
- Java九十条经验法则之第一条:用静态工厂方法代替构造器
一.用静态工厂方法代替构造器的优势 1.静态构造方法与构造器不同的第一大优势在于,他们有名称,而构造器名字相同,容易混淆,例如: 使用静态构造方式的方式,我们就可以通过知道产生的是什么样类型的对象,而 ...
- 第1条:考虑采用静态工厂方法代替构造器
第1条:考虑采用静态工厂方法代替构造器 第1条:考虑采用静态工厂方法代替构造器 对类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个公有的构造器.还有一种应该被程序员重视的方法:类提供 ...
- java 静态工厂方法代替构造器的好处
Java 的静态工厂方法 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第 ...
- 第一条:考虑用静态工厂方法代替构造器
转载链接:https://www.jianshu.com/p/ceb5ec8f1174 1.序:什么是静态工厂方法 在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来 ...
- 《Effective Java》学习笔记 - (1) 使用静态工厂方法代替构造器
文章目录 前言 使用静态工厂方法代替构造器 1. 优点 1.1 静态工厂方法有名称 1.2 不必每次调用的时候都创建一个对象 1.3 可以返回类型的任何子类型的对象 1.4 所返回的对象的类型可以随着 ...
- 第1条:考虑用静态工厂方法代替构造器
为了获得一个类的实例,有两种办法1.类提供一个公有的构造器 2.类提供一个公有的静态工厂方法. 静态工厂方法的优势: 1.有名称. 慎重地选择方法名称能突出多个构造器的区别,例如使用BigIntege ...
- 一起读经典-《Effective Java》1.1 考虑使用静态工厂方法代替构造器
1.静态工厂方法相较于构造器的优点 a.静态工厂方法能够自定义名称,使代码可读性更高 b.不必在每次调用的时候都创建新的实例 c.可以返回类型的子类型对象 2.静态工厂方法的常用名称: value o ...
最新文章
- 8.0系统安装Xposed框架失败Xposed framework version XX is installed
- 会为客户着想的商家才是好商家
- Go如何按行读取文本
- SVT-AV1:开源编解码最新进展
- 二叉树,建树,前序,中序,后序,递归 非递归
- 将结构体数据存储到一段字符串string中
- linux配置sftp-server,Ubuntu Server如何配置SFTP(建立用户监狱)
- 数据库存储时间的时区问题
- java中使用QBC的好处_使用QBC的方式应用多对多关系中的查询
- wincc7的常用c语言,wincc几个常用c语言编程-20210324073153.docx-原创力文档
- 研究自动驾驶技术的算法需要哪些知识?
- 安装VMware+linux+oracle手记
- 孙玄/陈东:聊一聊ZooKeeper的顺序一致性
- 使用ildasm反编译修改c# dll
- 新巴塞尔资本协议(中英文)
- 企业微信批量添加好友
- unity 刚体的运动 减速运动
- No valid crumb was included in the request
- 3.27 期货每日早盘操作建议
- 学法语的你伤不起之吐槽各种语言
热门文章
- 【完全背包】自然数拆分Lunatic版
- linux crontab怎么启动,【linux之crontab,启动】(示例代码)
- java添加录音,大家说说java程序里怎么插入视频和音频啊
- 看完不后悔系列,SQL语句执行慢怎么办,原因总结!!
- 第一台全自动电子计算机,关于世界上第一台电子计算机ENIAC的叙述错误的是() senny全自动微电脑水位控制仪...
- 计算机基础第五章知识,计算机基础第5次作业-第五章-Powerpoint知识题
- 一些抄来的冷知识...
- Android Studio 创建/打开项目时一直处于Building“project name”Gradle project info 的解决...
- Cleaner Robot - CodeForces	589J(搜索)
- 格式化输出函数(2): FormatDateTime