Strategy Design Pattern

The Strategy Design Pattern allows an object to have some or all of its behavior defined in terms of another object which follows a particular interface.  A particular instance of this interface is provided to the client when it is instantiated or invoked, providing the concrete behavior to be used.  The Strategy design pattern is used extensively to achieve the Single Responsibility Principle and the Dependency Inversion Principle, and is a key to Dependency Injection and the use of Inversion of Control Containers.

Intent

Define a family of algorithms, encapsulate each one, and make them interchangeable.  Strategy lets the algorithm vary independently from clients that use it. [GoF]

Reference

Amazon - Design Patterns: Elements of Reusable Object-Oriented Software [GoF]

Videos - Design Patterns Library @ Pluralsight