3

公開されているJavaAPIの多くはgetInstance、オブジェクトを生成して返すために使用しているようです。なぜそうなのか知りたいのですが、代わりにデフォルト/パラメーター化されたコンストラクターを使用しないのはなぜですか?

関連するデザインパターンはありますか?

4

7 に答える 7

7

Joshua Bloch による「Effective Java」の項目 1「Consider static factory methods instead of constructors」を読むことをお勧めします。彼は数多くの Java プラットフォーム機能の設計と実装を主導しており、その理由を知っています。

于 2012-12-10T06:58:01.487 に答える
4

Singleton Patternに関連付けられています。

多くの場合、オブジェクトの作成に役立つファクトリ メソッドもあります。

例えば:Boolean.parseBoolean("true");

ファクトリ メソッドの利点は、一連のコンストラクタよりも冗長で把握しやすいことです。

于 2012-12-10T06:56:49.803 に答える
2

もう 1 つの例 (シングルトンまたはマルチトン パターンを除く) は、リスナーの登録やスレッドの開始など、一般的に推奨されていない何かをコンストラクターで行う必要がある場合です。

class Whatever {

    private Whatever() {} //private constructor
    public Whatever getInstance() {
        Whatever w = new Whatever();
        startSomeThread();
        return w;
    }
}
于 2012-12-10T07:00:11.833 に答える
1

具体的な理由を探す手間を省くために...

これは、ファクトリメソッドパターンの場合です。それを使用する最も一般的な理由は次のとおりです。

  1. 構築が複雑すぎてコンストラクターで処理できない場合
  2. コンストラクターで許可または望まれないアクションが構築に必要な場合
  3. 製品のタイプ(「インターフェース」)を実際の実装(「クラス」)から切り離すため。
  4. 建設時に部分的な特殊化を実行するなど、パフォーマンスまたはアーキテクチャ上の理由で
  5. 明快さ/読みやすさのために

これらの理由の間にはいくつかの重複があります。実際、多くの場合、4つすべてが当てはまります。部分的な特殊化(4)には、タイプと実装(3)の分離がほとんど必要です。

于 2012-12-10T12:31:00.003 に答える
1

はい....Factory と Singleton パターンの両方に関連付けられています。ファクトリ パターンは、オブジェクト作成ロジックをビジネス ロジックから分離するために使用され、シングルトン パターンは、アプリケーション全体でオブジェクトの単一インスタンスのみを維持するために使用されます。

于 2012-12-10T07:01:10.667 に答える
1

「代わりにデフォルト/パラメーター化されたコンストラクターを使用しない理由」は、コンストラクターを呼び出した時点で、シングルトンパターン制約がインスタンスを1つだけ持つようにするには遅すぎるためです。全体のポイントは、単一のインスタンスへのアクセスを制御し、複数のインスタンスを避けることです。これを行う唯一の方法は、アクセス修飾子を使用して、コンストラクターにアクセスできないようにすることです。

于 2012-12-10T13:09:32.310 に答える
0

言われているように、簡単で安全なソリューションを提供するには、いくつかのパターン設計の「要件」の問題です。

ただし、動的インスタンス化は「getInstance」(java.lang.Class.getInstance()' および「java.lang.Class.NewInstance()')」の観点から、可能な限り使用を避ける必要があります。通常のクラス呼び出しまたはメソッド呼び出し。

必要な時だけ使おう!

于 2012-12-20T11:35:04.937 に答える