State
An application doesn't need to always be aware of it's state. Awareness tends to add more complexity into an application (such as multiple conditions). By extracting the different states into separate implementations all that is left for the application to do is update it's state to change it's functionality. A great example is a GPS and how it changes between day navigation and night navigation (by car, foot or bike).
