Alter an object's behavior when its state changes
Separates an object's interface from its implementation
TODO: in progress
State Machine