State

Origin: GoF 95
Reason: To allow an object to dynamically change a set of attributes. To change the nature (as opposed to the value) of an object's state.
Synopsis: Encapsulate the state of one object as one of a set of objects with the same superclass.
Example: A dialog box in a GUI may have different buttons at different times. The behavior of a same button may radically change over time.
Solution:
Context Class whose instances exhibit stateful behavior. It keeps a reference to a ConcreteState object that implements the state functionality. It is the client of the State pattern.
ContextState Superclass of all classes used by Context to represent a state. It provides methods for state initialization and change.
ConcreteStatei Concrete subclass of ContextState. It is referenced by Context.
See also: Delegation (the state functionality of an object is delegated to another object)
Flyweight and Singleton (to implement shared or unique-instance states)