私はこれらの3つの用語について本当に混乱しています。
私の理解はそれです:
ファクトリパターンでは、具体的なファクトリはありません。ファクトリは、パラメータに従って新しいオブジェクトを作成します。
abstract Factoryパターンでは、複数の具体的なファクトリがあります。クライアントは、さまざまな具体的な工場を明示的に作成する必要があります。
そうですか?
他の違いは何ですか?
さらに、ファクトリメソッドパターンとは何ですか?ファクトリパターンと同じですか?
4つの「デザインパターン;再利用可能なオブジェクト指向ソフトウェアの要素」の本には、「AbstractFactory」(別名「VirtualConstructor」)と「FactoryMethod」の2つのエントリが含まれています...「ConcreteFactory」についてはわかりません。私はその言葉を聞いたことがありますが、あまり考えたことはありません。
「ファクトリメソッド」では、オブジェクトには別のオブジェクトのインスタンス化を担当するメソッドがあります。一般的な例は、JavaScriptドキュメントオブジェクトとHtmlElement
オブジェクトの作成です。
var newDiv = document.createElement('div');
ただし、ファクトリメソッドの重要な部分はポリモーフィズムであるため、これは良い例ではありません。 document
を拡張して、別のcreateElement
を定義する別のクラスを定義できれば、これは主要なファクトリメソッドマテリアルになります。
抽象ファクトリは、具体的なクラスを指定せずに、「関連オブジェクトまたは依存オブジェクトのファミリを作成するためのインターフェイスを提供することを目的としています。
典型的な本の真っ直ぐな例はウィジェットファクトリです。 GoFが公開された当時、クロスプラットフォームのGUI開発は少し面倒だったので、抽象ウィジェットファクトリクラスを定義できました。
そのクラスは、メソッドcreateWindow
、createButton
、createScrollBar
などを持つことができます。次に、SwingウィジェットやAWTなどを生成するためにいくつかの実装が定義されます。次に、構成に応じて、異なるクラスがインスタンス化されます。
コンクリートファクトリは、抽象ファクトリまたはファクトリメソッドの非抽象実装であると私は信じています。
したがって、document
をオーバーライドするcreateElement
の独自の一般化を作成する場合、作成するクラスは具象ファクトリです。
同様に、WidgetFactory
は抽象ファクトリですが、SwingWidgetFactory
は具象ファクトリです。
FACTORY PATTERN:1つのファミリのオブジェクトを返します
ABSTRACT FACTORY:複数のファミリのオブジェクトを返します。
つまり、抽象ファクトリには複数のファクトリが含まれていると言えます。
学ぶための最良の方法は間違いなく読むことです。これを見てください: http://www.dofactory.com/Patterns/Patterns.aspx 。
ファクトリメソッドは、オブジェクトの作成をサブクラスに延期します。これは、基本クラス/インターフェイスが定義されているが、クライアントコードがこのインターフェイスに対してオブジェクトを作成しないことを意味します。インターフェイスを実装するサブクラスは、オブジェクトを初期化するために残されています。
抽象ファクトリはここにあります: http://www.dofactory.com/Patterns/PatternAbstract.aspx#_self2
そのサイトにはすでに良い情報があります。次善の策はウィキをチェックすることです:
http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
http://javadesign-patterns.blogspot.com/ はデザインパターンを学ぶのに良い場所です