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

関連ページ