- An object (known as a subject) maintains a list of objects depending on it (observers), automatically notifying them of any changes to state
- Subject: maintains a list of observers, facilitates adding or removing observers
- Observer: provides a update interface for objects that need to be notified of a Subject's changes of state
- helps maintain consistency between related objects without making classes tightly coupled
- subject has no track of when the observer finishes its task
- An observer is unware of other observers