デザインパターン-Strategy



Strategyパターンとは

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

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


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

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


構成要素


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


関連ページ



スポンサード リンク