デザインパターン-Strategy
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
関連ページ
- デザインパターン
- デザインパターン-Iterator
- デザインパターン-TemplateMethod
- デザインパターン-ChainOfResponsibility
- デザインパターン-Command
- デザインパターン-Interpreter
- デザインパターン-Mediator
- デザインパターン-Memento
- デザインパターン-Observer
- デザインパターン-State
- デザインパターン-Strategy
- デザインパターン-Visitor