为什么Java Pattern类使用工厂方法而不是构造函数?

6

这个问题在一般情况下有很好的讨论。

然而,我想知道为什么Pattern类使用静态方法compile来创建对象,而不是构造函数?

对我来说,使用构造函数更直观。


更多信息请参见Joshua Bloch博士的文章,摘自他的书《Effective Java》(第2版):创建和销毁Java对象-第1项:考虑使用静态工厂方法代替构造函数 - Basil Bourque
4个回答

9

Pattern类比JDK中的许多内容都要新。因此,我认为他们采用了使用工厂方法而不是公共构造函数的更现代方法。你不能真正地将工厂方法适配到现有类中。

一般来说,使用工厂方法而不是构造函数没有太多理由,所以我认为就是这样。工厂方法允许你抽象对象的创建,这非常有用。


6

为什么你们会使用相同的正则表达式创建两个Pattern实例?静态创建方法可以使实现在被多次请求相同正则表达式时可能缓存Pattern,有时返回相同的对象。编译Pattern可能很昂贵。此外,如果需要额外的compile方法(比如不同的语法),可以给它们命名不同的名称,而不是混淆的构造函数。


总的来说,你的观点是正确的。但是我认为这种优化应该是可选的。尽管还有很多其他地方可以应用这种优化。 - ordnungswidrig

5
静态工厂模式用于当底层实现有可能会被更改以影响构造函数时。简而言之,工厂允许库维护者在不受构造方面的二进制和源代码兼容性限制的情况下获得重大的灵活性。详情请参见http://en.wikipedia.org/wiki/Factory_method_pattern,特别是“其他优点和变体”部分。

2

使用Pattern的工厂方法也可以最终允许使用第三方插件正则表达式实现。不幸的是,Sun公司没有实现任何使用工厂方法时可能得到的功能(插件能力、缓存)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接