-
Notifications
You must be signed in to change notification settings - Fork 0
/
strategy_runner.rb
25 lines (19 loc) · 1.16 KB
/
strategy_runner.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
require_relative 'strategy/navigator'
require_relative 'strategy/foot_strategy'
require_relative 'strategy/two_wheeler_strategy'
require_relative 'strategy/four_wheeler_strategy'
foot_strategy = FootStrategy.new
navigator = Navigator.new(route_strategy: foot_strategy)
puts navigator.get_route(1,2)
two_wheeler_strategy = TwoWheelerStrategy.new
navigator.route_strategy = two_wheeler_strategy
puts navigator.get_route(1,2)
four_wheeler_strategy = FourWheelerStrategy.new
navigator.route_strategy = four_wheeler_strategy
puts navigator.get_route(1,2)
# Here we see, to use different routing strategy we don't have to change navigator class.
# If this is implemented using inheritance where Navigator is superclass and TwoWheelerNavigator, FourWheelerNavigator, FootNavigator are subclass
# Strategy design pattern replaces use of inheritance with composition.
# consider we get more and more other strategies like fare calculator, live speed tracker, etc. Implementing this with inheritance we will have to hard code everything.
# But with strategy pattern we just need to create strategies and pass it to the navigator.
# Generally composition is always better than inheritance.