Abstract Factory パターン

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 パターン

関連項目




参考文献



  • - 『オブジェクト指向における再利用のためのデザインパターン』

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。