Strategy pattern

Strategy pattern
2nd commit