The strategy pattern is another widely used and incredibly useful. Its beauty lies in its versatility as it can be applied in numerous situations. Its purpose is to provide a selection of solutions (strategies) to a given problem at runtime. A good example would be an app with a strategy to run different code depending whether the app was being installed on Windows, Mac OS, or Linux. Were the system of designation we used above to design UIs for different devices so efficient, we could easily use a strategy pattern to carry out this task. It would look something like this:
For now, we will step ahead a little and imagine a situation where the users of our sandwich maker app are ready to pay. We will assume three methods: credit card, cash, and a coupon. Those paying cash will simply pay the set price. A little unfairly, those paying by card will be charged a small fee and those with a coupon will get 10% off. We will also use a singleton to represent the basic price...