1

Builder パターンについて読んでいましたが、いつものように Factory パターンと混同されました。

Abstract Factory と Builder パターンの違いを示す良い記事を見てきました。

http://champika-nirosh.blogspot.in/2008/04/what-is-difference-between-abstract.html

しかし、私の混乱は、Abstract Factory に似た Builder パターンよりも、Factory Method パターンに似ているように感じるということです。私の理解が正しいかどうかはわかりません。しかし、ファクトリ メソッドでも、別のファクトリ (コンクリート ファクトリのメソッド) を使用して、1 つの特定のオブジェクト (製品のファミリではありません) を作成します。そのシナリオでは、Builder が Factory Method パターンとどのように異なるかが異なります。Builder でオブジェクトを作成するには、より多くの手順が必要であることは知っていましたが、それ以外に、オブジェクトを使用する必要がある特定のシナリオはありますか? 私を案内してください。

ありがとう。

4

1 に答える 1

3

特定の使用例は、どちらを選択するか (どちらかの場合) に影響します。ただし、参照するリンクの内容を本質的に繰り返すには:

抽象ファクトリとファクトリ メソッドの両方が、不明な型のインスタンスを作成しています。通常、これらはインターフェイスに対応するクラスを返しますが、具象型が何であるかはわかりません (気にする必要はありません)。そのリンクの画像を使用するには、WindowsFactory を使用しています。つまり、抽象ファクトリは、Windows と互換性のあるインスタンスを返します。ファクトリが代わりに LinuxFactory である場合、Linux で動作するオブジェクトが返される可能性があります。また、特定のタイプの Factory があるというだけで、LinuxFactory があるか WindowsFactory があるかはおそらくわからないことに注意してください。

したがって、抽象ファクトリとファクトリ メソッドのパターンは、ポリモーフィック型の構築に関するものです (具象型がどうなるかわからない、または気にしない場合を含む)。ただし、型のインスタンスを取得するための呼び出しは通常簡単です。ファクトリからビルドするには、おそらく次のように呼び出します。

MyInterfaceType myInstance = myFactory.getTheItemOfMyInterfaceType();

ビルダー パターンは、既知の型である場合もそうでない場合もある (ただし、おそらくそうである) 複雑なオブジェクトの構築に関するものです。この場合、多くの場合、1 つのパラメーターを次々に設定して、型を構築するための複雑な一連の呼び出しが予想されます。多くの既知のパラメーターと引数があるため、通常、そこから返されるオブジェクトのタイプがわかっています (必須ではありませんが、抽象ファクトリよりも可能性が高くなります)。Builder は、オブジェクトの構築が複雑であるが、必ずしもポリモーフィックではない場合に使用されます (ポリモーフィックである可能性がありますが、それはパターンの前提ではありません)。何かを構築するためのビルダー呼び出しは次のようになります (実際の例については、Android AlertDialog を参照してください)。

Builder b = new Builder();
b.setSomeValueA(myChoiceForA);
b.setSomeValueB(myChoiceForB);
MyInterfaceType myInstance = b.build();

それが役立つことを願っています。

于 2014-02-01T04:29:05.503 に答える