【问题标题】:Why does Java Pattern class use a factory method rather than constructor?为什么 Java Pattern 类使用工厂方法而不是构造函数?
【发布时间】:2010-10-25 17:25:50
【问题描述】:

general case 对此进行了很好的讨论。

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

在我看来使用构造函数更直观。

【问题讨论】:

标签: java constructor factory


【解决方案1】:

Pattern 类比 JDK 中的许多东西都更新。因此,我相信他们采用了使用工厂方法的更现代的方法,而不是公共构造函数的旧方法。您不能真正将工厂方法改造为现有的类。

一般来说,没有太多理由在工厂方法上使用构造函数,所以我认为这就是它的全部意义所在。工厂方法允许您抽象对象创建,这非常有用。

【讨论】:

    【解决方案2】:

    为什么你会有两个Pattern 同一个正则表达式的实例?静态创建方法允许实现潜在地缓存Patterns,如果多次请求相同的正则表达式,有时会返回相同的对象。编译 Patterns 可能很昂贵。此外,如果需要额外的 compile 方法(比如不同的语法),它们可以被赋予不同的名称,而不是一组令人困惑的重载构造函数。

    【讨论】:

    • 一般来说你的论点是正确的。但我认为这种优化应该是可选的。尽管如此,还有很多其他地方可以应用这种优化。
    【解决方案3】:

    当底层实现很有可能以可能影响构造函数的方式进行更改时,使用静态工厂模式。简而言之,工厂为库维护者提供了极大的灵活性,而不会受到构建方面的二进制和源代码兼容性的束缚。

    请参阅http://en.wikipedia.org/wiki/Factory_method_pattern 了解详情 - 尤其是“其他好处和变体”部分。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多