Implementation of strategy pattern. Example extracted from "Head First: Design Patterns".
The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from who use it.