add iterator & composite patterns