Abstract Factory パターンとは
Abstract Factoryパターンは、デザインパターンの一つで、GoF(Gang of Four)によって定義されました。このパターンは、関連するオブジェクトのグループを生成するためのAPIを提供し、クライアントがこれらのオブジェクト群をまとめて変更できるように設計されています。また、オブジェクトの組み合わせ方を誤るリスクを減らすことも目的としています。日本語では「抽象的な工場」と訳されることが多く、Kitパターンとも呼ばれます。
Abstract Factoryパターンの基本的な
クラス図は以下の通りです。
AbstractFactory
| createProduct()
|
ConcreteFactory
| createProduct() -> Product
Product
AbstractProduct
|
ConcreteProduct
利用例
Abstract Factoryパターンは、複数の関連するオブジェクトを生成する必要がある場合に便利です。例えば、異なるOSやGUIツールキットに対応したアプリケーションを開発する際に、それぞれの環境に合わせたオブジェクトを生成するために利用できます。
応用例
DOM(
Document Object Model)は、Abstract Factoryパターンを応用したAPIの一例です。DOMでは、`Document`インターフェースがAbstractFactoryの役割を果たし、`createElement`や`createTextNode`などのメソッドが、具体的な`Element`や`Text`ノードを生成する`createProduct()`の役割を担います。以下は、
クラス図との対応関係です。
- - AbstractFactory: `org.w3c.dom.Document`
- - AbstractFactory#createProduct(): `org.w3c.dom.Document#createElement(String)`, `org.w3c.dom.Document#createTextNode(String)` など
- - Product: `org.w3c.dom.Element`, `org.w3c.dom.Text` など
生成方法の変更
AbstractFactoryクラスがfactory methodを持ち、それを個々のConcreteFactoryが上書きすることで生成するProductを変更する手法が一般的です。また、Prototypeパターンを利用して、prototypeとなるオブジェクトを変更することで生成するProductを切り替える方法もあります。ConcreteFactoryは、Singletonパターンを利用してシングルトンオブジェクトとして実装されることもあります。
Factory Method パターンとの違い
『オブジェクト指向における再利用のためのデザインパターン』では、Factory Methodパターンは「クラスパターン」、Abstract Factoryパターンは「オブジェクトパターン」に分類されています。
Factory Methodパターンは、親クラスであるCreatorクラスが、オブジェクトの生成を子クラスであるConcreteCreatorクラスに委ねるという、クラス間の関連です。一方、Abstract Factoryパターンは、クライアントのインスタンスが、具体的なConcreteFactoryのインスタンスにオブジェクトの生成を委ねるという、オブジェクト同士の関連です。つまり、Factory Methodパターンが単一のオブジェクト生成に焦点を当てるのに対し、Abstract Factoryパターンは関連するオブジェクト群の生成を扱う点が異なります。
関連パターン
- - Factory Method パターン
- - Prototype パターン
- - Singleton パターン
関連項目
参考文献
- - 『オブジェクト指向における再利用のためのデザインパターン』