Mantém o controle de acompanhamento do estado do seu próprio percurso. Portanto, você pode ter mais que um percurso em andamento ao mesmo tempo.
Simplifica a interface do agregado. A interface de percurso de Iterator elimina as necessidades de uma interface semelhante em Aggregate, dessa forma simplificando a interface do agregado.
Suporta variações no percurso de um agregado, por exemplo um ArrayList ou uma Matriz. Os agregados complexos podem ser percorridos de muitas maneiras. Iteradores tornam fácil mudar o algoritmo de percurso, bastando substituir a instância do iterador por uma diferente. É possível também definir subclasses de iterador para suportar novos percursos.
Desvantagens
Devemos ter uma atenção especial em qual operação o Iterator realizará, pois, caso ele altere, adicione ou remova objetos do conjunto de dados, temos que garantir que essa operação não invalidará os dados do conjunto. Como exemplo imagine que dois iterator são utilizados em paralelo, um deles vai mostrando os dados e o outro procura um elemento específico para removê-lo, o que acontece quando um Iterator acessa um objeto que outro removeu? Haverá uma inconsistência na aplicação, por isso é preciso definir bem qual operação o Iterator realizará.
Um aspecto fundamental no uso do Iterator é decidir qual parte controla a iteração, o iterator ou o cliente que o iterator. Quando o cliente controla a iteração, o iterador é chamado de um iterador externo, e quando é o iterador que a controla, este se chama iterador interno. Cada uma das implementações possui efeitos colaterais diferentes, por exemplo, no Iterador Externo o cliente fica responsável por remover o iterador depois que ele for utilizado. No caso da linguagem Java, que possui um garbage colector, este não é um problema tão grande, mas em C++ por exemplo, precisamos tomar cuidado de excluir o Iterador após seu uso. Dessa forma é preciso analisar bem o problema e verificar qual das implementações melhor se adequa ao projeto.