見出し画像

🛠AbstractFactory(create)はオブジェクト同士のつながりFactoryMethod(createXXX)はクラス同士のつながり

ファクトリーといえばアンディ・ウォーホル


ファクトリーはアンディ・ウォーホルのニューヨークのスタジオで、1962年から1984年の間に3か所にあった。当初のファクトリーは、マンハッタンのミッドタウンにある東47丁目231番地の5階にあった。

It wasn't called the Factory for nothing. It was where the assembly line for the silkscreens happened.(ファクトリーは全く意味がないというわけでもなかった。)

ウィンドウシステム 万物がウィンドウから生ずるという発想

〇TKとか〇widgetとか〇WTとかいうものには多かれ少なかれファクトリーが登場。窓から世界へ。DOMの構造も参考になるだろう。

Element は Document の中にあるすべての要素オブジェクト (すなわち、要素を表現するオブジェクト) が継承する、もっとも一般的な基底クラスです。このインターフェイスは、すべての種類の要素に共通するメソッドとプロパティを記述するだけのものです

Factoryでは便宜行Baseclassが同じものが生成されることが多い。prototypeとの違いも調べればよい。

Factory MethodのGoFの説明ではDOMが出てくる。

Abstract Factory (87)はfactory methodsで実装されることが多い。(略)factory methodsは通常、template methods(325)内で呼び出されます。上のドキュメントの例では、NewDocumentはテンプレートメソッドです。

ファクトリ(create)とプロトタイプ(clone)の違い

Prototypes (117)は、Creatorのサブクラスを必要としません。しかし、しばしば Product クラスの Initialize 操作が必要になります。
Creatorはオブジェクトを初期化するためにInitializeを使用します。factory methodsではInitialize操作は必要ありません。

プロトタイプはサブクラスの生成を必要としないが、「初期化」の操作を必要とする。ファクトリメソッドはサブクラスの生成を必要とするが、初期化を必要としない

Wikipediaでの説明はこんな感じ。

Factory Method パターンは親クラスであるCreatorクラスが子クラスであるConcreteCreatorクラスにオブジェクトの生成を委ねるという、CreatorクラスとConcreteCreatorクラスとの関連である。一方でAbstract Factory パターンは、ClientのインスタンスがConcreteFactoryのインスタンスにオブジェクトの生成を委ねるという、オブジェクト同士の関連である。


キャプチャ
AFオブジェクト同士のつながり
キャプチャ
FMクラス同士のつながり

AbstractFactoryとFactoryMethodの違い

1)concreteFactoryがCreateProductで様々なProductを作るしくみ(create)をClientに提供するのがAbstractFactory

2)ConcreteCreatorが作るConcreteProductを利用するためにCreatorがConcreateCreaterにプロダクトの生成を移譲する(createXXX)のがFactoryMethod

3)AcstractFactoryが様々なproductを作るしくみをClinetに提供する際にAcstractFactoryがCreatorとしてConcreteCreaterにプロダクトの生成を移譲したらFactoryMethod(createXXX)でAbstractFactory(create)を提供したことになる

template methodとの違い 骨格のようなものの提示がtemplate method(中身はあったりなかったり) 中身があるのはファクトリ系(create)

キャプチャ

テンプレートメソッドによって送られるselfメッセージのいくつかは、フックメソッドになるかもしれません。これらのメソッドはテンプレートメソッドと同じ基底クラスで実装されますが,ボディは空です(つまり,何もしません).フックメソッドはサブクラスがオーバーライドできるように存在し,テンプレートメソッド自体をオーバーライドすることなくアルゴリズムの動作を細かく調整することができます.言い換えれば、フックメソッドは可変的な実装を「ぶら下げる」ための「フック」を提供します。


お願い致します