Add Observer Pattern
Add Mediator Pattern