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 optionnellementremove() - 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