公開されているJavaAPIの多くはgetInstance
、オブジェクトを生成して返すために使用しているようです。なぜそうなのか知りたいのですが、代わりにデフォルト/パラメーター化されたコンストラクターを使用しないのはなぜですか?
関連するデザインパターンはありますか?
公開されているJavaAPIの多くはgetInstance
、オブジェクトを生成して返すために使用しているようです。なぜそうなのか知りたいのですが、代わりにデフォルト/パラメーター化されたコンストラクターを使用しないのはなぜですか?
関連するデザインパターンはありますか?
Joshua Bloch による「Effective Java」の項目 1「Consider static factory methods instead of constructors」を読むことをお勧めします。彼は数多くの Java プラットフォーム機能の設計と実装を主導しており、その理由を知っています。
Singleton Patternに関連付けられています。
多くの場合、オブジェクトの作成に役立つファクトリ メソッドもあります。
例えば:Boolean.parseBoolean("true");
ファクトリ メソッドの利点は、一連のコンストラクタよりも冗長で把握しやすいことです。
もう 1 つの例 (シングルトンまたはマルチトン パターンを除く) は、リスナーの登録やスレッドの開始など、一般的に推奨されていない何かをコンストラクターで行う必要がある場合です。
class Whatever {
private Whatever() {} //private constructor
public Whatever getInstance() {
Whatever w = new Whatever();
startSomeThread();
return w;
}
}
具体的な理由を探す手間を省くために...
これは、ファクトリメソッドパターンの場合です。それを使用する最も一般的な理由は次のとおりです。
これらの理由の間にはいくつかの重複があります。実際、多くの場合、4つすべてが当てはまります。部分的な特殊化(4)には、タイプと実装(3)の分離がほとんど必要です。
はい....Factory と Singleton パターンの両方に関連付けられています。ファクトリ パターンは、オブジェクト作成ロジックをビジネス ロジックから分離するために使用され、シングルトン パターンは、アプリケーション全体でオブジェクトの単一インスタンスのみを維持するために使用されます。
「代わりにデフォルト/パラメーター化されたコンストラクターを使用しない理由」は、コンストラクターを呼び出した時点で、シングルトンパターン制約がインスタンスを1つだけ持つようにするには遅すぎるためです。全体のポイントは、単一のインスタンスへのアクセスを制御し、複数のインスタンスを避けることです。これを行う唯一の方法は、アクセス修飾子を使用して、コンストラクターにアクセスできないようにすることです。
言われているように、簡単で安全なソリューションを提供するには、いくつかのパターン設計の「要件」の問題です。
ただし、動的インスタンス化は「getInstance」(java.lang.Class.getInstance()' および「java.lang.Class.NewInstance()')」の観点から、可能な限り使用を避ける必要があります。通常のクラス呼び出しまたはメソッド呼び出し。
必要な時だけ使おう!