add iterator pattern
add iterator pattern