何时以及如何使用构造函数
Foo bar = new Foo();
以及何时以及如何使用getInstance()(静态工厂方法)
Foo bar = Foo.getInstance();
两者有什么区别?我一直使用构造函数,但是什么时候应该使用getInstance()呢?
getInstance()
每个人似乎都专注于单例,而我认为问题实际上是关于 构造函数与静态工厂方法 。
这实际上是 项目1:考虑静态工厂方法,而不是 Joshua Bloch 的 Effective Java 的构造函数 :
项目1:考虑静态工厂方法而不是构造函数 类允许客户端获取其自身实例的通常方法是提供一个公共构造函数。每个程序员的工具箱中都应该包含另一种技术。一个类可以提供一个公共的 静态工厂方法 ,该方法只是返回类实例的静态方法。这是来自的一个简单示例Boolean(原始类型的装箱原始类型 boolean)。此方法将布尔基本值转换为 Boolean对象引用: public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 请注意,静态工厂方法 与“ 设计模式” [Gamma95,p。1]中的 工厂方法 模式不同。107]。此项中描述的静态工厂方法在“ 设计模式”中 没有直接等效的方法。 一个类可以向其客户端提供静态工厂方法,而不是构造方法或为构造方法提供补充。提供静态工厂方法而不是公共构造方法具有优点和缺点。
类允许客户端获取其自身实例的通常方法是提供一个公共构造函数。每个程序员的工具箱中都应该包含另一种技术。一个类可以提供一个公共的 静态工厂方法 ,该方法只是返回类实例的静态方法。这是来自的一个简单示例Boolean(原始类型的装箱原始类型 boolean)。此方法将布尔基本值转换为 Boolean对象引用:
Boolean
boolean
public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }
请注意,静态工厂方法 与“ 设计模式” [Gamma95,p。1]中的 工厂方法 模式不同。107]。此项中描述的静态工厂方法在“ 设计模式”中 没有直接等效的方法。
一个类可以向其客户端提供静态工厂方法,而不是构造方法或为构造方法提供补充。提供静态工厂方法而不是公共构造方法具有优点和缺点。
优点(引用本书):
缺点(仍在引用这本书):