The Strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. It allows the algorithm used to be chosen at runtime. The context uses a strategy interface to call the algorithm defined by the concrete strategies. Strategy is used when there is conditional logic based on many algorithms, algorithms need to be changed independently of clients, or algorithms use data clients shouldn't know about. It provides a more flexible alternative to subclassing by allowing strategies to be mixed and matched at runtime.