Strategy Pattern
- a class behavior or its algorithm can be changed at run time.
- we create objects which represent various strategies and a context object whose behavior varies as per its strategy object. The strategy object changes the executing algorithm of the context object.
- similar to "State Pattern". "State Pattern" use different object based on state but "Strategy Pattern" is based on strategy.