update prototype
add mediator pattern
add Command Pattern