デザインパターン-AbstractFactory
AbstractFactory(抽象的な工場)とは
AbstractFactoryとは
AbstractFactoryパターンは、インスタンスの生成を専門に行うクラスを用意することで、複数のモジュール群の再利用を効率化することを目的とするパターンです。
これにより、具体的なクラスを明確にすることなく、関連し合うオブジェクトの集まりを生成することが可能になります。
また、関連するインスタンス群を生成するためのAPIを集約することによって、整合性が必要となるオブジェクト群を誤りなしに生成します。
簡単にいえば、関連オブジェクトを生成するFactoryが多数になった場合に、効率的に管理するために、Factoryを生成するFactoryを作成することがAbstractFactoryパターンです。
(Factoryについては、デザインパターン-FactoryMethodを参照下さい。)
Abstract Factoryパターンの目的は、GoF本では次のように定義されています。
互いに関連したり依存し合うオブジェクト群を、その具象クラスを明確にせずに生成するためのインターフェースを提供する。
AbstractFactoryパターンのメリット
- Factoryを生成するFactoryを作成することで、関連オブジェクトを生成するFactoryが多数になっても効率的に管理できます。
- Factoryで利用するオブジェクト一式をまとめて入れ替えることが可能です。
構成要素
- AbstractFactory
- 工場の抽象クラス
- ConcreteAbstractFactory
- 工場の具象クラス
- AbstractProduct
- 製品の抽象クラス
- ConcreteAbstractProduct
- 製品の具象クラス
rubyでのAbstractFactory実装方法
クラス名の文字列からインスタンスを生成します。
evalで文字列を評価してからメソッドを起動します。
class Factory
def Factory.get_factory(classname)
begin
eval(classname).new
rescue NameError
puts "Unknown factory class: #{classname}."
end
end
end
関連ページ
- デザインパターン
- デザインパターン-FactoryMethod
- デザインパターン-Builder
- デザインパターン-Prototype
- デザインパターン-Singleton
- デザインパターン-AbstractFactory