- Give a way to avoid tight coupling between components.
- One object make itself observable(publisher), by adding a method that allows another objects observe itself.
- By registering to the observer list, registered objects can get notification when observable object change its state.
- A class that has some methods, that creates object for you.
- Allows to create object runtime, without specifying the exact class.
- Just call the Factory with parameter(by which Factory decide), then Factory will create specific object for you.