对于类而言,为了让客户端获取它自身的一个实例,最传统的方法就是提供一个公有的构造器。还有一种方法,也应该在每个程序员的工具箱中占有一席之地。类可以提供一个公有的静态工厂方法( static factory method ),它只是一个返回类的实例的静态方法。下面是一个来自Boolean (基本类型boolean 的装箱类)的简单示例。这个方法将boolean 基本类型值转换成了一个Boolean 对象引用:
public static Boolean valueOf(boolean b) {
return b? Boolean.TRUE : Boolean.FALSE;
}
优点:
- 它们有名称
- 不必在每次调用它们的时候都创建一个新对象
- 它们可以返回原返回类型的任何子类型的对象
- 所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值。
- 方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在。
缺点:
- 类如果不含公有的或者受保护的构造器,就不能被子类化。
- 第二个缺点在于,程序员很难发现它们。