add mediator design pattern