Effective Java笔记 - 静态工厂方法
静态工厂方法(static factory method)是除构造器外的另一种创建对象实例的途径。(与设计模式中的工厂方法无关。)
例:
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
使用静态工厂方法而不是构造器的优缺点
优点
- 静态工厂方法有名字,便于程序的使用和阅读。当类需要多个构造方法时,利用多个不重名的静态工厂方法可以解决给定参数时唯一构造器的限制。
- 不必每次调用都创建一个新的对象。immutable类可以使用preconstructed对象或者缓存对象、重复使用,节省资源。这样的类是instance-controlled,保证singleton或noninstantiable,以及在immutable value类中保证不存在两个相等的实例,a.equals(b)当且仅当a == b。
- 可以返回任何属于返回值子类的对象。这样API不必公开其类,隐藏实现细节。
- 返回的对象所属的类是一个随输入参数变化而变化的函数。
- 返回对象所属的类可以是尚未存在的类。
缺点
- 没有public或protected构造器的类不能有子类。(在immutable类型的情况下是这必须的,并且促使程序员使用composition而不是inheritance,转化成了优点。)
- 不如构造器更方便于程序员在API文档中找到。
参考文献:
- Bloch, J. (2017). Effective Java (3rd ed.). Addison-Wesley Professional.