デザインパターン-FactoryMethod

FactoryMethodパターンとは

FactoryMethodパターンは、インスタンスの生成をサブクラスに任せることで、より柔軟なインスタンス生成することを目的とするパターンです。
インスタンスを生成するサブクラスを「Factory=工場」に見立てています。


FactoryMethodパターンのメリット

  • 生成するインスタンスの種類が多くなりそうな場合に、インスタンス生成の責務を外に切り出すことで、保守性を高めることができます。
  • 生成と処理を分離することで、利用側の変更なしに処理(クラス)を追加することができます。
  • クラスの生成を隠蔽することで、結合度を下げることができます。

構成要素

  • AbstractFactoryクラス
    • Factoryの共通したテンプレートを定義する抽象クラス
  • ConcreteFactoryクラス
    • Factoryの個別実装を受け持つ継承クラス
  • AbstractProduct
    • Productのインターフェースとテンプレートを定義する抽象クラス
  • ConcreteProduct
    • Productの個別実装を受け持つ

rubyによるFactoryMethodパターンの実装


#!/usr/bin/env ruby

# Productの抽象クラス
class AbstractProduct
  def use
  end
end

# Productの個別実装
class ConcreteProduct < AbstractProduct
  def initialize(str)
    @owner = str
  end

  def use
    "#{@owner}を利用します。"
  end
end

# Factoryの抽象クラス
class AbstractFactory
  def create(*arg)
    create_product(*arg)
  end
end

# Factoryの個別実装を受け持つ継承クラス
class ConcreteFactory < AbstractFactory
  def create_product(str)
    ConcreteProduct.new(str)
  end
end

factory = ConcreteFactory.new
product = factory.create("menu")
puts(product.use)


関連ページ