在一般情况下对此进行了很好的讨论。
但是,我想知道为什么Pattern
类使用compile
静态方法来创建对象,而不是构造函数?
在我看来,使用构造函数更直观。
Pattern 类比 JDK 中的很多东西都要新。因此,我相信他们采用了使用工厂方法的更现代的方法,而不是公共构造函数的旧方法。您不能真正将工厂方法改造为现有的类。
一般来说,没有太多理由在工厂方法上使用构造函数,所以我认为这就是它的全部。工厂方法允许您抽象对象创建,这非常有用。
为什么你会Pattern
使用同一个正则表达式的两个实例?Pattern
如果多次请求相同的正则表达式,静态创建方法允许实现潜在地缓存s 有时会返回相同的对象。编译Pattern
s 可能很昂贵。此外,如果compile
需要额外的方法(比如不同的语法),它们可以被赋予不同的名称,而不是一组令人困惑的重载构造函数。
当底层实现很有可能以可能影响构造函数的方式进行更改时,使用静态工厂模式。简而言之,工厂为库维护者提供了极大的灵活性,而不受构建方面的二进制和源代码兼容性的束缚。
有关详细信息,请参阅http://en.wikipedia.org/wiki/Factory_method_pattern - 特别是“其他好处和变体”部分。
使用工厂方法Pattern
也可能最终允许使用第 3 方插件正则表达式实现。不幸的是,Sun 没有实现使用工厂方法可以获得的任何特性(插件能力、缓存)。