add Iterator and Mediator Pattern