01_考虑用静态工厂方法代替构造器
来源:互联网 发布:驱动精灵mac版下载 编辑:程序博客网 时间:2024/06/05 06:39
看到静态工厂方法,我首先想到的就是Java设计模式中的工厂模式,相信很多人都和我一样,但是在书中很明确的说明:
注意,静态工厂方法与设计模式中的工厂方法模式不同。本条目中所指的静态工厂方法并不直接对应于设计模式中的工厂方法。
静态工厂方法替代构造器的优势:
他们有名称
例如:BigInteger(int,int,Random)返回的BigInteger可能为素数,如果采用BigInteger.probablePrime的静态工厂方法来表示,更加的清晰明了。
一个类只能有一个带有指定签名的构造器。要想避开这个,无非就是让参数列表在顺序上有所不同,而这就会导致程序员面对这样的API时,很难将其记住,从而导致误操作。
由于静态工厂方法能够明确的对其进行区分,就不会造成这种误操作。不必在每次调用他们的时候都创建一个新对象
- 避免创建不必要的重复对象,提升性能
- 严格控制在某个时刻哪些实例应该存在
- 实例受控可以确保它是一个Singleton或者不可实例化的
- 不可变类可以确保不会存在两个相等的实例,即当且仅当a==b时才有a.equals(b)为true
- 如果确保上述一点,则可以利用==来代替equals提升性能
- 枚举类型保证了这一点。
它们可以返回原返回类型的任何子类型对象
想必这个就不用多说了,子要是子类型的都可以返回。- 在创建参数化类型实例的时候,它们使代码变得更加简介
Map<String,List<String>> m = new HashMap<String,List<String>>();
简化版本
public static <K,V> HashMap<K,V> newInstance(){ retrun new HashMap<K,V>();}
静态工厂方法替代构造器的缺点
- 类如果不含有公有的或者受保护的构造器,就不能被子类化
- 他们与其他的静态方法实际上没有任何区别
:
0 0
- 01_考虑用静态工厂方法代替构造器
- 01、考虑用静态工厂方法代替构造器
- 01-考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- [Effective Java]考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 《Effective Java》-考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- EffectiveJava-考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器。
- 考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器-----静态工厂方法讲解
- 考虑使用静态工厂方法代替类的构造器
- 移植三星版本uboot_s5pv210
- shell命令之基本的数组操作
- Codeforces Round #367 (Div. 2) E. Working routine(十字链表)
- LaTeX/Tables
- C# .net中cookie值为中文时的乱码解决方法
- 01_考虑用静态工厂方法代替构造器
- GPIO八种工作模式总结
- 【React-Router】关于browserHistory出现did not match any routes的问题
- 结合Scikit-learn介绍几种常用的特征选择方法
- 环境字体对python字符串格式化显示效果的影响
- (15)稀疏矩阵的压缩-十字链表
- JS 删除字符串最后一个字符的几种方法
- HNOI2015 开店
- #pragma once与#ifndef两种防止头文件二次编译的区别