Advantages:
- provides a mechanism to put a specific behavior (e.g. when light is off or light is on) into separate class
- decouples an object in a particular state from what developer wants to do in a particular state
Design patterns. To remember more vividly