
# ConcreteStrategy
class AddStrategy
def do_operation(a, b)
return a + b
end
end
# ConcreteStrategy
class SubtractStrategy
def do_operation(a, b)
return a - b
end
end
# Context
class Calc
def initialize()
@strategy = nil
end
def execute(a, b)
return 0 if @strategy == nil
return @strategy.do_operation(a, b)
end
def set_strategy(strategy)
@strategy = strategy
end
end
calc = Calc.new
result1 = calc.execute(5, 3)
# result1 is 0
calc.set_strategy(AddStrategy.new)
result2 = calc.execute(5, 3)
# result2 is 8
calc.set_strategy(SubtractStrategy.new)
result3 = calc.execute(5, 3)
# result3 is 2
puts "result1 is #{result1}"
puts "result2 is #{result2}"
puts "result3 is #{result3}"