- コンストラクターとは異なって、名前を持てる
- コンストラクターとは異なり、インスタンスを生成しなくても良い(同じインスタンスを使いまわしても良い)
- コンストラクターとは異なり、任意のサブタイプを返せる
- コンストラクターと異なり、パラメーターの個数等入力値によって実装を切り替えられる
- コンストラクターとは異なり、ほしいインターフェースの実装がなくてもよい(
ServiceLoader
パターン)
public
またはprotected
なコンストラクターを持つクラス以外のサブタイプを作れない- が、しかし、大したデメリットではない
- プログラマーが
static
ファクトリーメソッドを見つけられない- IDE があるので、それも大したデメリットではない。むしろ、メリットですらあるように思える