add Iterator Design Pattern