Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

【自習メモ】Factoryパターンとかいうものについて

これを使うと、クラス実体の生成を抽象化する事ができます。
将来、全く予期していなかった型をサポートする事になっても対応できます。

実例

class SkillsFactory
  def self.create_instance(player, skill)
    case data[:key]
    when :type_A
      return TypeA.new(player, skill)
    when :type_B
      return TypeB.new(player, skill)
    else
      raise "no such skill"
    end
  end
end

player = Player.find(1)

return @active_skills.map do |h|
  ability = AbilityFactory.create_instance(player, h)
  {name: h[:name], value: ability.val_a?, method: ability.method_a}
end

こうすることで、後々@active_skillsに後付けメソッドを突っ込んでもUIがしっかりしていれば対処できます。
ハードコーディングでクラス生成している場合はこうはいきませんね。
...ただし、いかなるときもYAGNI原則です。
それを忘れちゃ、このビット荒野では生き残れません。
増える見込みがでた場合のみ、実装を検討しましょう。