01、考虑用静态工厂方法代替构造器
来源:互联网 发布:数据与信息的关系是 编辑:程序博客网 时间:2024/06/05 15:43
优点
1. 有名称,当一个类需要多个带有相同参数的构造器时,就可以用静态工厂方法代替构造器,并且慎重地选择名称以便突出它们之间的区别
例如下边的有关汽车的类,可以使用三个静态工厂方法返回不同的汽车
public class Car {private String name;private Car(String name) {this.name = name;}public static Car getFord() {return new Car("Ford");}public static Car getVolkswagen() {return new Car("Volkswagen");}public static Car getLamborghini() {return new Car("Lamborghini");}public String getName() {return this.name;}}
2. 不必在每次调用它们的时候都创建一个新对象
单例
确保不可实例化
确保不会存在两个相等的实例,当且仅当a==b的时候才有a.equals(b)为true,这样可以用==代替equals方法,提高性能。例如枚举类型
3. 可以返回原返回类型的任何子类型的对象
下边的例子,利用父类的静态工厂方法返回三个不同的子类
public class Car2 {public static Car2 newFord() {return new Ford();}public static Car2 newVolkswagen() {return new Volkswagen();}public static Car2 newLamborghini() {return new Lamborghini();}}class Ford extends Car2 {public Ford() {System.out.println("Ford");}}class Volkswagen extends Car2 {public Volkswagen() {System.out.println("Volkswagen");}}class Lamborghini extends Car2 {public Lamborghini() {System.out.println("Lamborghini");}}4. 在创建参数化类型实例的时候,它们使代码变得更加简洁
缺点
1. 类如果不含有公有的或者受保护的构造器,就不能被子类化
2. 与其他的静态方法实际上没有任何区别。方法名称可以各式各样,实例化的时候有可能会很迷惑
静态工厂方法的惯用名称
1. valueOf
2. of
3. getInstance
4. newInstance
5. getType
6. newType
- 01、考虑用静态工厂方法代替构造器
- 01-考虑用静态工厂方法代替构造器
- 01_考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- [Effective Java]考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 《Effective Java》-考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- EffectiveJava-考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器。
- 考虑用静态工厂方法代替构造器
- 考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器-----静态工厂方法讲解
- 考虑使用静态工厂方法代替类的构造器
- [python]怎么样用Python读取一个目录树-os.walk入门
- [service] service生命周期,启动方式,与intentService的比较
- 为Editplus安装smali代码语法高亮插件
- 我的Android进阶之旅------>QR的生成(二维码)
- mem_fun & mem_fun_ref
- 01、考虑用静态工厂方法代替构造器
- Search in Rotated Sorted Array
- list_entry
- 转:Java语言的XPath API
- HTML5表单之Input 类型-range
- cocos2d-x 入门 如何播放音乐和音效
- SQL Server"错误 21002: [SQL-DMO]用户已经存在问题
- C-DOCSIS业务流
- 关于 IOS 开发中遇到的 读取 cell xib 文件时导致死机的问题。