一般的なケースでは、これについての良い議論があります。
しかし、なぜPattern
クラスcompile
がコンストラクターではなく静的メソッドを使用してオブジェクトを作成するのか、具体的に疑問に思っていました。
コンストラクターを使用する方が直感的であるように思えます。
Patternクラスは、JDKの多くのものよりも新しいものです。そのため、パブリックコンストラクターの古いアプローチではなく、ファクトリメソッドを使用する新しいアプローチを採用したと思います。ファクトリメソッドを既存のクラスに実際に後付けすることはできません。
一般的に言って、ファクトリメソッドよりもコンストラクタを使用する理由はあまりないので、それだけだと思います。ファクトリメソッドを使用すると、オブジェクトの作成を抽象化できます。これは非常に便利です。
Pattern
同じ正規表現の2つのインスタンスを使用するのはなぜですか?静的作成メソッドを使用するとPattern
、同じ正規表現が複数回要求された場合に、実装が同じオブジェクトを返す可能性があります。のコンパイルPattern
にはコストがかかる場合があります。また、追加compile
のメソッドが必要になった場合(たとえば、異なる構文)、混乱を招くようにオーバーロードされたコンストラクターのセットの代わりに、異なる名前を付けることができます。
静的ファクトリパターンは、コンストラクタに影響を与える可能性のある方法で基礎となる実装が変更される可能性が高い場合に使用されます。つまり、ファクトリは、構築側でのバイナリとソースの互換性に縛られることなく、ライブラリメンテナに大きな柔軟性をもたらします。
詳細については、 http://en.wikipedia.org/wiki/Factory_method_patternを参照してください。特に「その他の利点とバリエーション」セクションを参照してください。
にファクトリメソッドを使用Pattern
すると、最終的にはサードパーティのプラグイン正規表現実装を使用できるようになる可能性があります。残念ながら、Sunは、ファクトリメソッドを使用するときに取得できる機能(プラグイン機能、キャッシュ)を実装していません。