Here’s a brief checklist on how to implement the strategy pattern:
1. Determine what aspects of your program vary versus which aspects are static.
2. Encapsulate the aspects that vary by creating interfaces/classes for each of them.
3. Program to the encapsulated interfaces/classes rather than implementing those aspects locally.
4. Strive to utilize composition over inheritance as much as possible to keep your code as flexible and maintainable as possible.