strategy(戦略)パターン
戦略を切り替えるパターンです。
処理を他のクラスに委譲することを前提とし、クライアント(この例ではsorterです。)が自由にそのクラスを切り替えることが出来ます。
strategyとtemplate methodパターンの違いはこんな説明がわかりやすかったです。
Strategyの方は,全く異なるアルゴリズムごっそり差し替えるためのパターン。
一方でTemplate Methodの方は"template method"の名の通り,アルゴリズムの実行ステップを手順として規定しておいて,各ステップ内の処理をサブクラスに実装させている. Template methodは将来の実装のためのガイドとも言える。 なお実行ステップを記述するtemplate methodは当然overrideされないようにしておく.
また、継承使ったらtemplate_methodで委譲したらstrategyパターンみたいな解説もあるのでちょっと曖昧。
class SortStrategy def sort(dataset) end end class BubbleSortStrategy < SortStrategy def sort(dataset) puts "バブルソートを実行" dataset end end class QuickSortStrategy < SortStrategy def sort(dataset) puts "クイックソートを実行" dataset end end class Sorter attr_reader :sorter def initialize(sorter) @sorter = sorter end def sort(dataset) @sorter.sort(dataset) end end dataset = [1,4,5,6,6,7] sorter = Sorter.new(BubbleSortStrategy.new) sorter.sort(dataset) sorter = Sorter.new(QuickSortStrategy.new) sorter.sort(dataset)