デザインパターン-Strategy

Strategyパターンとは

Strategyパターンとは、委譲により戦略(アルゴリズム)を切り替えるパターンです。

実行時に処理のアルゴリズムを決定したいときに利用します。


アルゴリズム(戦略)をカプセル化(部品化)し、使用する側には意識させる事なく、柔軟に戦略(アルゴリズム)を切替えることを可能とします。

なお、「Strategy」とは「戦略」という意味であり、ここではアルゴリズムの事を指します。


構成要素

  • Strategy(戦略)
    • 戦略のインタフェースを定義します。
  • ConcreteStrategy(具体的戦略)
    • 具体的な戦略をを実装します。
  • Context(状況判断)
    • 状況により「ConcreteStrategy」を切替えて、その戦略を利用します。
  • Client(利用者)

rubyによるStrategyパターンの実装


#!/usr/bin/env ruby

# 戦略のインタフェースを定義します。
class Strategy
  def strategy_method; end
end

# 具体的戦略
class ConcreteStrategyA < Strategy
  def strategy_method
    puts("ConcreteStrategyA")
  end
end

# 具体的戦略
class ConcreteStrategyB < Strategy
  def strategy_method
    puts("ConcreteStrategyB")
  end
end

# 状況により戦略を切替えて、その戦略を利用します。 
class Context
  def initialize
    @strategy = nil
  end

  def set_strategy(strategy)
    @strategy = strategy
  end

  def context_method
    return if(@strategy == nil)
    @strategy.strategy_method
  end
end

context = Context.new
context.set_strategy(ConcreteStrategyA.new)
context.context_method
context.set_strategy(ConcreteStrategyB.new)
context.context_method
context.set_strategy(ConcreteStrategyA.new)
context.context_method


関連ページ