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