add Mediator Pattern