Strategy

Origin: GoF 95
Reason: To allow the selection of an algorithm to vary by object and over time.
Synopsis: Encapsulate related algorithms in classes that are subclasses of a common class.
Example: Consider a program that generates a calendar. Holidays displayed by the calendar must vary by nation and/or religious group.
Solution:
Client This class delegates an operation to an abstract class or interface, the AbstractStrategy. It does not know the actual object that will execute the operation. Calendar printer.
AbstractStrategy Abstract class or interface that abstracts the operation provided by all its subclasses, the ConcreteStrategies. Defines method, isHoliday, that takes a day of the year.
ConcreteStrategyi There are many classes that provide different implementations of the operation specified by AbstractStrategy. Specilizes method isHoliday for a specific country.
See also: Template Method and Factory Method (structurally similar)