- abstract solution to specific problem
- create / manage creations
- subject has list of observers
- notifies observers on change
- observer changes dependant on the change (instead of periodically asking whether the subject changed)
- If you have subsystem it makes sense to have only one entrance to the subsystem
- “gate keeper”
- Single responsibility
- Open/closed
- Liskov substitution
- Interface segregation
- Dependency inversion
- each class should have single responsibility
- Opened for extension, but closed for modification.
- Use inheritance and interface
- Objects of type T may be replaced with objects of type S
- create interface between dependency relationship
- we care a lot about those in exam