Iterator

Catégorie

Pattern comportemental

Problème

Fournir un moyen d’accéder aux éléments d’un objet agrégé de manière séquentielle sans exposer sa représentation sous-jacente. Utile lorsque la collection a une structure interne complexe.

Solution

  • Créer une interface Iterator avec les méthodes next(), hasNext(), et optionnellement remove()
  • Les itérateurs concrets parcourent la collection, en maintenant leur propre position
  • La collection fournit une méthode iterator() qui retourne un itérateur

Structure

  • Iterator : Interface pour accéder et parcourir les éléments
  • ConcreteIterator : Implémente Iterator ; maintient l’état de parcours
  • Aggregate : Interface pour créer un itérateur
  • ConcreteAggregate : Retourne un itérateur concret

Avantages clés

  • Parcours uniforme — La même interface fonctionne pour tout type de collection
  • Parcours multiples — Plusieurs itérateurs peuvent parcourir simultanément
  • Encapsulation — La structure interne de la collection est masquée
  • Flexibilité — Différentes stratégies d’itération (avant, arrière, filtrée)

Compromis

  • Surcharge — Création d’objets itérateur pour des parcours simples
  • Complexité de l’interface — De nombreuses variantes d’itérateurs (avant, arrière, filtrée, etc.)

Quand l’utiliser

  • Vous voulez accéder au contenu d’une collection sans en exposer la représentation
  • Vous voulez supporter plusieurs parcours d’une collection
  • Vous voulez une interface uniforme pour parcourir différentes collections

Exemples