Skip to content

Instantly share code, notes, and snippets.

@sevperez
Created October 10, 2018 20:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sevperez/5238ff592313bc8771db9cfa45a26c92 to your computer and use it in GitHub Desktop.
Save sevperez/5238ff592313bc8771db9cfa45a26c92 to your computer and use it in GitHub Desktop.
module RunStrategies
class RunStrategyInterface
def self.run(name)
raise "Run method has not been implemented!"
end
end
class Jog < RunStrategyInterface
def self.run(name)
puts "#{name} is now jogging at a comfortable pace."
end
end
class Sprint < RunStrategyInterface
def self.run(name)
puts "#{name} is now sprinting full speeed!"
end
end
class Marathon < RunStrategyInterface
def self.run(name)
puts "#{name} is now running at a steady pace."
end
end
end
class Runner
attr_reader :name, :strategy
attr_writer :strategy
def initialize(name, strategy)
@name = name
@strategy = strategy
end
def run
@strategy.run(@name)
end
end
class Race
attr_reader :runners
def initialize(runners)
@runners = runners
end
def start
@runners.each { |runner| runner.run }
end
end
alice_ruby = Runner.new("Alice Ruby", RunStrategies::Jog)
florence_joyner = Runner.new("Florence Joyner", RunStrategies::Sprint)
eliud_kipchoge = Runner.new("Eliud Kipchoge", RunStrategies::Marathon)
race = Race.new([alice_ruby, florence_joyner, eliud_kipchoge])
race.start
# Alice Ruby is now jogging at a comfortable pace.
# Florence Joyner is now sprinting full speeed!
# Eliud Kipchoge is now running at a steady pace.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment