Techioz Blog

Rubyのファクトリーメソッドとは何ですか?

概要

ファクトリ メソッドは、self キーワードを利用して独自のクラスのオブジェクトをインスタンス化するクラス メソッドであると理解しています。これがどのように役立つのか、または初期化メソッドの機能をどのように拡張できるのかわかりません。

私はコマンド ライン アドレス帳を作成するプロジェクトに取り組んでいます。このプロジェクトでは、異なる属性を持つ研修生または講師 (サブクラス) を作成できるように、パーソン クラスでファクトリ パターンを使用するように求められます。

解決策

ファクトリ クラスは、さまざまな種類のオブジェクトを生成する単一のファクトリ メソッドを使用する簡単な方法です。 これはパラメータを受け取ります。パラメータは、作成するオブジェクトの種類をメソッドに指示します。たとえば、渡されたシンボルに応じて従業員または上司を生成するには、次のようにします。

class Person
  def initialize(attributes)
  end
end

class Boss
  def initialize(attributes)
  end
end

class Employee
  def initialize(attributes)
  end
end

class PersonFactory
  TYPES = {
    employee: Employee,
    boss: Boss
  }

  def self.for(type, attributes)
    (TYPES[type] || Person).new(attributes)
  end
end

その後:

employee = PersonFactory.for(:employee, name: 'Danny')
boss = PersonFactory.for(:boss, name: 'Danny')
person = PersonFactory.for(:foo, name: 'Danny')

このトピックについては、より詳細なブログ投稿も書きました: The Factory Pattern