これを使うと、クラス実体の生成を抽象化する事ができます。
将来、全く予期していなかった型をサポートする事になっても対応できます。
実例
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原則です。
それを忘れちゃ、このビット荒野では生き残れません。
増える見込みがでた場合のみ、実装を検討しましょう。