静态工厂方法而不是构造函数
Static factory methods instead of constructors
我在阅读 Joshua Block 的 Effective Java 书第 1 项后一直在研究这个问题,该书关于使用工厂静态方法而不是构造函数。在文本中,他尽可能地捍卫这种使用,并在其他理由中引用了实施 Singleton 或 Flyweight 标准的可能性。它还引用了Boolean
class的案例,通过valueOf (boolean)
方法巧妙地使用了享元:
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
我的问题是:我了解使用这些模式的优点,但无法在构造函数本身中实现?单独使用它们并不能证明创建静态工厂方法是合理的。
but could not be implemented in the constructor itself?
否:new
,根据规范,总是创建一个新实例(或失败),所以new Boolean(b)
总是return一个Boolean
的新实例。
Boolean.valueOf
returns 一个预先存在的实例。这是可取的,因为只有两个可能的值,所以创建更多值根本没有意义。
我在阅读 Joshua Block 的 Effective Java 书第 1 项后一直在研究这个问题,该书关于使用工厂静态方法而不是构造函数。在文本中,他尽可能地捍卫这种使用,并在其他理由中引用了实施 Singleton 或 Flyweight 标准的可能性。它还引用了Boolean
class的案例,通过valueOf (boolean)
方法巧妙地使用了享元:
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
我的问题是:我了解使用这些模式的优点,但无法在构造函数本身中实现?单独使用它们并不能证明创建静态工厂方法是合理的。
but could not be implemented in the constructor itself?
否:new
,根据规范,总是创建一个新实例(或失败),所以new Boolean(b)
总是return一个Boolean
的新实例。
Boolean.valueOf
returns 一个预先存在的实例。这是可取的,因为只有两个可能的值,所以创建更多值根本没有意义。