assaulter's diary

主にバイクについて

Rubyで簡易ストラテジー

いい感じに慣れてきたので、Rubyに関するメモを残していこうと思います。

簡易ストラテジーの実装

異なるkeyを渡した場合に、一部のメソッドの動作を変更したい場合を想定。

class SearchClass
  module IdSearchRequest
    def self.request(value)
      # keyがIDの場合のリクエストを返却
    end
  end

  module NameSearchRequest
    def self.request(value)
      # keyがNAMEの場合のリクエストを返却
    end
  end

  MODULE_BY_KEY = {
    id: IdSearchRequest,
    name: NameSearchRequest
  }
  
  def search(key, value)
    request = MODULE_BY_KEY[key.to_sym]::request(value)
    # リクエストオブジェクトを使って検索を実行
  end
end

JavaとかだとEnumを使って実装するんでしょうが、Rubyで実装する場合はこんな感じですかね。

ちなみに、モジュールにインスタンス変数を持たせたい場合は、モジュールを取ってきてclass.eval等でincludeする方法も結構使ってます。