mediator pattern example