1
public class A {
    private A(int param1, String param2) {}

    public static A createFromCursor(Cursor c) {
        // calculate param1 and param2 from cursor
        return new A(param1, param2);
    }
}

この種の建設コードの設計パターンはありますか? もしそうなら、このパターンの目的は何ですか? なぜ使用しないのですか:

// calculate param1 and param2 from cursor
new A(param1, param2);
4

3 に答える 3

3

ということで、まとめます。

そのパターンはStatic Factory Methodと呼ばれ、たとえばここで説明されています: How to use "Static factory Methods" instead of constructors?

最も単純な形式では、次のようになります。

 class A {

     public static A newA() {
        return new A();
     }
     private A(){}
 }

コンストラクターを呼び出すための計算パラメーターが含まれているため、例はもう少し複雑です

public class A {
    private A(int param1, String param2) {}

    public static A createFromCursor(Cursor c) {
        // calculate param1 and param2 from cursor
        return new A(param1, param2);
    }
}

新しいオブジェクトを作成するためにこのような方法を使用する目的は、直接呼び出す前に毎回計算を繰り返す必要がある場合がありますnew A(params)。つまり、繰り返しを避けるだけであり、これを実現する最も簡単な方法はメソッドを作成することです。

さらに、同じ方法を使用して、作成するためのさらに多くのオプションを提供できますnew A。たとえば、計算方法を次のように変更できます。

    public static A createFromCursorDifferently(Cursor c) {
        // calculate param1 and param2 from cursor in different way
        return new A(param1, param2);
    }

次に、このメソッドに同じパラメーターを渡すと、結果が異なります (メソッド名が異なるため)。

もちろんnew A、以前と同じコンストラクターを使用して、他のパラメーターから作成することもできます。

    public static A createFromObject(Object o) {
        // calculate param1 and param2 from object
        return new A(param1, param2);
    }

したがって、コンストラクタのみを単純に使用するよりも、静的ファクトリ メソッドを使用すると、はるかに多くの可能性があります。

于 2012-06-16T17:54:59.237 に答える
2

あなたのコードがコンパイルされた場合、それは単純なファクトリ メソッドを表します (それは静的な what? もちろん A を返します)。これをパターンと考える人もいますが、非常に単純化されているためそうしない人もいます。この概念を使用する、 Abstract Factory パターンと呼ばれるパターンがありますが、その方法ははるかに複雑です。

于 2012-06-16T17:22:51.810 に答える
1

extends Aあなたが投稿したものの目的は、修正された場合、実行時の型をアプリオリに知る必要のないもののインスタンスを返すメソッドを提供することです。

そうです、あなたが書いたものとは多少異なりますが、 Factory メソッドのパターンに似ているように聞こえます。ファクトリクラスは、製品クラスとは異なる必要があります。

于 2012-06-16T17:26:01.753 に答える