【问题标题】:Static factory methods instead of constructors静态工厂方法而不是构造函数
【发布时间】:2019-10-24 15:14:49
【问题描述】:

在阅读 Joshua Block 的 Effective Java Book 第 1 条关于使用工厂静态方法而不是构造函数后,我一直在研究这个问题。在文本中,他尽可能为使用进行辩护,并在其他理由中引用了实施 SingletonFlyweight 标准的可能性。它还引用了Boolean 类的案例,它通过valueOf (boolean) 方法巧妙地使用了享元

public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}

我的问题是:我了解使用这些模式的好处,但无法在构造函数本身中实现?单独使用它们并不能证明创建静态工厂方法是合理的。

【问题讨论】:

标签: java design-patterns singleton flyweight-pattern


【解决方案1】:

但无法在构造函数本身中实现?

否:new,根据规范,总是创建一个新实例(或失败),因此new Boolean(b) 将始终返回一个新的Boolean 实例。

Boolean.valueOf 返回一个预先存在的实例。这是可取的,因为只有两个可能的值,所以创建更多是没有意义的。

【讨论】:

  • 当你成为私有构建器时如何处理依赖注入问题?使用这种构建策略时是否可以使用 DI?
  • @dellasavia 我不确定你在问什么。考虑到构造函数实际上只是特殊的静态方法:使用静态工厂方法的 DI 含义与使用构造函数相同
  • 我的意思是当使用像 Spring 这样的框架注入时。它如何知道将使用哪个构造方法?
  • @dellasavia 我无法回答 Spring,但对于 Guice,您必须有一个明确的 @Provides 方法。
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 2016-11-28
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
相关资源
最近更新 更多