Defines a family of algorithms, encapsulates each one and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
- Encapsulate what varies
- Favor composition over Inheritance
- Program to interfaces, not implementations
For setting Behavior dynamically we can use setter method for that Behavior