Strategy:
defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
Principles:
Identify the aspects of your application that vary and separate them from what stays the same. (Strategy pattern)
Program to an interface, not an implementation. (Strategy pattern)
Favor composition over inheritance. (Strategy pattern)