「Abstract Factory パターン」の版間の差分

削除された内容 追加された内容
Cocoa ruto (会話 | 投稿記録)
参考文献の追加。Clientクラスに関する記述を追加。関連するパターンをGoF本に基く記述に変更。
Alexbot (会話 | 投稿記録)
m ロボットによる: 細部の編集
1行目:
'''Abstract Factory パターン'''(アブストラクト・ファクトリ・パターン)<ref name="GoF">[[エーリヒ・ガンマ|エリック・ガンマ]]、[[ラルフ・ジョンソン]]、[[リチャード・ヘルム]]、[[ジョン・ブリシディース]](著)、[[グラディ・ブーチ]](まえがき)、本位田真一、吉田和樹(監訳)、『オブジェクト指向における再利用のためのデザインパターン』、[[ソフトバンクパブリッシング]]、1995。ISBN 978-47973111294-7973-1112-9.</ref>とは、[[ギャング・オブ・フォー (情報工学)|GoF]](Gang of Four; 4人のギャングたち)によって定義された[[デザインパターン (ソフトウェア)|デザインパターン]]の1つである。
関連するインスタンス群を生成するための [[Application Programming Interface|API]] を集約することによって、複数のモジュール群の再利用を効率化することを目的とする。日本語では「抽象的な工場」と翻訳される事が多い。
 
Kit パターンとも呼ばれる<ref name="GoF"/>。
 
== クラス図 ==
Abstract Factory パターンの[[クラス図]]を以下に挙げる。
[[画像ファイル:Abstract Factory UML class diagram.svg|center|650px|Product1, Product2 は抽象クラスであり、ConcreteProduct1, ConcreteProduct2 はそれぞれを継承した具象クラスである。抽象クラス AbstractFactory は、抽象クラス Product1, Product2 を生成するメソッドを持つ。クラス ConcreteFactory は AbstractFactory を継承し、具象クラス ConcreteProduct1, ConcreteProduct2 を生成するメソッドを持つ。ClientクラスはAbstractFactoryのインターフェースを通じて、ConcreteFactoryのインスタンスを使い、ConcreteProduct1や2のインスタンスを得る。ClientクラスはProduct1や2のインターフェースを通じてConcreteProduct1や2のインスタンスを利用する]]
 
== 利用例 ==
{{節スタブ}}
 
== 応用例 ==
[[Document Object Model|DOM]] は Abstract Factory パターンを応用した API の一つである。参考までに、クラス図との対応関係を示す。
 
18行目:
;Product:[http://download.java.net/jdk/jdk-api-localizations/jdk-api-ja/builds/latest/html/ja/api/org/w3c/dom/Element.html org.w3c.dom.Element], [http://download.java.net/jdk/jdk-api-localizations/jdk-api-ja/builds/latest/html/ja/api/org/w3c/dom/Text.html org.w3c.dom.Text] など
 
== 関連するパターン ==
AbstractFactoryクラスはfactory method ([[Factory Method パターン]])を持ち、それを個々のサブクラスが上書きすることで生成するProductを変えることが多い。しかし、[[Prototype パターン]]を使い、prototypeとなるオブジェクトを変えることで生成するProductを変えることもある<ref name="GoF"/>。
 
ConcreteFactoryは、singletonオブジェクト ([[Singleton パターン]])であることもある。
 
== Factory Method パターンとの違い ==
『オブジェクト指向における再利用のためのデザインパターン』においてはFactory Method パターンは「クラスパターン」に分類されている。一方Abstract Factory パターンは「オブジェクトパターン」に分類されている。
 
Factory Method パターンは親クラスであるCreatorクラスが子クラスであるConcreteCreatorクラスにオブジェクトの生成を委ねるという、CreatorクラスとConcreteCreatorクラスとの関連である。一方でAbstract Factory パターンは、ClientのインスタンスがConcreteFactoryのインスタンスにオブジェクトの生成を委ねるという、オブジェクト同士の関連である。
 
== 関連項目 ==
*[[Factory Method パターン]]
*[[Prototype パターン]]