43

私はこれらの3つの用語について本当に混乱しています。

私の理解はそれです:

  • ファクトリパターンでは、具体的なファクトリはありません。ファクトリは、パラメータに従って新しいオブジェクトを作成します。

  • Abstract Factoryパターンでは、複数の具体的なファクトリがあります。クライアントは、さまざまな具体的なファクトリを明示的に作成する必要があります。

そうですか?

他の違いは何ですか?

さらに、ファクトリメソッドパターンとは何ですか?ファクトリパターンと同じですか?

4

3 に答える 3

39

4つの「デザインパターン;再利用可能なオブジェクト指向ソフトウェアの要素」の本には、「AbstractFactory」(別名「VirtualConstructor」)と「FactoryMethod」の2つのエントリが含まれています。「コンクリート工場」については知りません。私はその言葉を聞いたことがありますが、あまり考えたことはありません。

ファクトリメソッド

「ファクトリメソッド」では、オブジェクトには別のオブジェクトのインスタンス化を担当するメソッドがあります。一般的な例は、JavaScriptドキュメントオブジェクトとオブジェクトの作成HtmlElementです。

var newDiv = document.createElement('div');

ただし、ファクトリメソッドの重要な部分はポリモーフィズムであるため、これは良い例ではありません。document別のクラスを定義する別のクラスを定義するように拡張できればcreateElement、これは主要なファクトリメソッドマテリアルになります。

抽象ファクトリ

抽象ファクトリは、「具体的なクラスを指定せずに、関連オブジェクトまたは依存オブジェクトのファミリを作成するためのインターフェイスを提供することを目的としています。

典型的な本の真っ直ぐな例は、ウィジェットファクトリです。GoFが公開された当時、クロスプラットフォームのGUI開発は少し面倒だったので、抽象ウィジェットファクトリクラスを定義できました。

そのクラスには、メソッドなどが含まれる可能性がありますcreateWindow。次にcreateButtoncreateScrollBarSwingウィジェットやAWTなどを生成するためにいくつかの実装が定義されます。次に、構成に応じて、異なるクラスがインスタンス化されます。

補遺-コンクリート工場

コンクリートファクトリは、抽象ファクトリまたはファクトリメソッドの非抽象実装であると私は信じています。

したがって、documentオーバーライドする独自の一般化createElementを作成する場合、作成するクラスは具象ファクトリです。

同様にWidgetFactory、抽象ファクトリである一方SwingWidgetFactoryで、具体的なファクトリになります。

于 2010-01-17T05:11:12.437 に答える
4

学ぶための最良の方法は間違いなく読むことです。これを見てください:http://www.dofactory.com/Patterns/Patterns.aspx

ファクトリメソッドは、オブジェクトの作成をサブクラスに延期します。これは、基本クラス/インターフェイスが定義されていることを意味しますが、クライアントコードはこのインターフェイスに対してオブジェクトを作成しません。インターフェイスを実装するサブクラスは、オブジェクトを初期化するために残されています。

抽象ファクトリはここにあります:http://www.dofactory.com/Patterns/PatternAbstract.aspx#_self2

そのサイトにはすでに良い情報があります。次善の策はwikiをチェックすることです:

http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29

http://javadesign-patterns.blogspot.com/ は、デザインパターンを学ぶのに適した場所です。

于 2010-01-17T04:54:57.277 に答える
4

FACTORY PATTERN:1つのファミリのオブジェクトを
返しますABSTRACT FACTORY:複数のファミリのオブジェクトを返します。

つまり、抽象ファクトリには複数のファクトリが含まれていると言えます。

于 2010-05-19T04:29:45.947 に答える