add Iterator Pattern