Thématiques principales

mercredi 8 novembre 2017

Design pattern : Iterator

Le pattern est un pattern compagnon. Il permet d'abstraire et de découpler le comportement de parcourt sur les listes.

L'iterateur permet l’accès multiple aux éléments de la liste ou même d’implémenter des parcours spécifiques (comme le reverse, ou les filtres):

Aujourd'hui, surtout en Java, ou en Groovy, l'iterateur est masqué derrière des sucres syntaxiques

Ainsi sur une liste standard en java on écrira ceci:


List<String> l=new ArrayList<>();
for(String s:l)
{
  // TODO
}


alors que classiquement on l'utilisation de l'iterateur se manipule ainsi:


Iterator<String> it=l.iterator();
for(it.hasNext())
{
  String s=it.next();
  //TODO
}


Ceci est la façon standard d'utiliser les iterateurs impliquant que l'on implémente de moins en moins nos propres iterateurs alors qu'il permettent

  • de fournir des parcour spécifique
  • de modéliser des générateurs
La description que nous donnons la de l'iterateur est celui que tout le monde connait, il s'agit en fait de l'iterateur que l'on appelle Passif. Il existe cependant un autre type d'iterateur, l'iterateur Actif.

L'iterateur Actif est justement ce que l'on pourrait considérer comme l'apanage de l'iteration. Autant si l'iterateur passif peut fournir sous differentes formes des manières de parcourir les éléments de la liste, l'iterateur actif va proposer d'ajouter des traitements sur les éléments choisi ou non.

Ainsi, le prototype d'un iterateur passif sera souvent simplement hasNext pour savoir s'il existe un suivant et next pour obtenir l’élément, l'iterateur actif proposera des prédicats d’existences de certains type d’éléments, une iteration spécifique sur ceux ci, voir un traitement en ligne de ces données, voir même des procédures de recherche d’éléments particuliers.

Les iterateurs actif sont assez peu présent dans les patterns que l'on peut croiser, pourtant ils fournissent souvent des moyens élégants de réaliser des opérations arithmétiques, des concaténations, etc


iterateur actif, iterateur passif 

Aucun commentaire:

Enregistrer un commentaire