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する方法も結構使ってます。