rubyでデザインパターン strategyパターン

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)