Le pattern Iterator
Description
Le pattern Iterator fournit un accès séquentiel à une collection d’objets à des clients sans que ceux-ci doivent se préoccuper de l’implantation de cette collection.
Exemple
Nous voulons donner un accès séquentiel aux véhicules composant le catalogue. Pour cela, nous pouvons implanter dans la classe du catalogue les méthodes suivantes :
-
début : initialise le parcours du catalogue.
-
item : renvoie le véhicule courant.
-
suivant : passe au véhicule suivant.
Cette technique présente deux inconvénients :
-
Elle fait grossir inutilement la classe du catalogue.
-
Elle ne permet qu’un seul parcours à la fois, ce qui peut être insuffisant (notamment dans le cas d’applications multitâches).
Le pattern Iterator propose une solution à ce problème. L’idée est de créer une classe Itérateur dont chaque instance peut gérer un parcours dans une collection. Les instances de cette classe Itérateur sont créées par la classe de collection qui se charge de les initialiser.
Le but du pattern Iterator est de fournir une solution qui puisse être paramétrée par le type des éléments des collections. Nous introduisons donc deux classes abstraites génériques :
-
Itérateur est une classe abstraite générique qui introduit les méthodes début, item et suivant.
-
Catalogue est également une classe abstraite générique qui introduit la méthode qui crée, initialise et retourne une instance...
Structure
1. Diagramme de classes
La figure 4-5.2 détaille la structure générique du pattern, qui est très proche du diagramme des classes de la figure 4-5.1.
Figure 4-5.2 - Structure du pattern Iterator
2. Participants
Les participants au pattern sont les suivants :
-
Itérateur est la classe abstraite qui implante l’association de l’itérateur avec les éléments de la collection ainsi que les méthodes. Elle est générique et paramétrée par le type TÉlément.
-
ItérateurConcret (ItérateurVéhicule) est une sous-classe concrète de Itérateur qui lie TÉlément à ÉlémentConcret.
-
Collection (Catalogue) est la classe abstraite qui implante l’association de la collection avec les éléments et la méthode créeItérateur.
-
CollectionConcrète (CatalogueVéhicule) est une sous-classe concrète de Collection qui lie TÉlément à ÉlémentConcret et TItérateur à ItérateurConcret.
-
Élément est la classe abstraite des éléments de la collection.
-
ÉlémentConcret (Véhicule) est une sous-classe concrète de Élément utilisée par ItérateurConcret et CollectionConcrète.
3. Collaborations
L’itérateur garde...
Domaines d’application
Le pattern est utilisé dans les cas suivants :
-
Un parcours d’accès au contenu d’une collection doit être réalisé sans accéder à la représentation interne de cette collection.
-
Il doit être possible de gérer plusieurs parcours simultanément.
Exemple en Java
Nous présentons l’exemple en Java du parcours du catalogue de véhicules à l’aide d’un itérateur.
Le code source de classe abstraite Element se trouve à la suite. Les éléments possèdent une description. La méthode motCleValide vérifie l’appartenance d’un mot-clé à la description.
public abstract class Element
{
protected String description;
public Element(String description)
{
this.description = description;
}
public boolean motCleValide(String motCle)
{
return description.indexOf(motCle) != - 1;
}
}
La sous-classe concrète Vehicule introduit une méthode affiche.
public class Vehicule extends Element
{
public Vehicule(String description)
{
super(description);
}
public void affiche()
{
System.out.println("Description du vehicule : " +
description);
}
}
La classe Iterateur introduit les méthodes debut, suivant, item ainsi que la méthode setMotCleRequete qui initialise...