Visitor Pattern
Mediator Pattern