add iterator pattern
update iterator pattern