Abstract Factory パターン

Abstract Factory パターン（アブストラクト・ファクトリ・パターン）エリック・ガンマ、ラルフ・ジョンソン、リチャード・ヘルム、ジョン・ブリシディース（著）、グラディ・ブーチ（まえがき）、本位田真一、吉田和樹（監訳）、『オブジェクト指向における再利用のためのデザインパターン』、ソフトバンクパブリッシング、1995。.とは、GoF（Gang of Four; 4人のギャングたち）によって定義されたデザインパターンの1つである。
関連するインスタンス群を生成するための API を集約することによって、利用側がインスタンス群をまとめて変えられるようにし、さらに組み合わせ方を間違えないようにする。日本語では「抽象的な工場」と翻訳される事が多い。

Kit パターンとも呼ばれる。

 クラス図 
Abstract Factory パターンのクラス図を以下に挙げる。

 利用例 

 応用例 
DOM は Abstract Factory パターンを応用した API の一つである。参考までに、クラス図との対応関係を示す。

AbstractFactoryorg.w3c.dom.Document
AbstractFactory#createProduct()org.w3c.dom.Document#createElement(String), org.w3c.dom.Document#createTextNode(String) など
Productorg.w3c.dom.Element, org.w3c.dom.Text など

 関連するパターン 
生成するProductを変更する手法としては、AbstractFactoryクラスがfactory method（Factory Method パターンを参照）を持ち、それを個々のConcreteFactoryが上書きする手法が一般的である。しかし、Prototype パターンを使い、prototypeとなるオブジェクトの変更により生成するProductを変える手法もある。

ConcreteFactoryは、singletonオブジェクト（Singleton パターンを参照）であることもある。

 Factory Method パターンとの違い 
『オブジェクト指向における再利用のためのデザインパターン』においてはFactory Method パターンは「クラスパターン」に分類されている。一方Abstract Factory パターンは「オブジェクトパターン」に分類されている。

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

 関連項目 
Factory Method パターン
Prototype パターン
デザインパターン
Document Object Model

 参考文献 

Category:デザインパターン (ソフトウェア)
Category:抽象