Modèles de conception - Modèle d'itérateur
Le modèle d'itérateur est un modèle de conception très couramment utilisé dans l'environnement de programmation Java et .Net. Ce modèle est utilisé pour obtenir un moyen d'accéder aux éléments d'un objet de collection de manière séquentielle sans avoir besoin de connaître sa représentation sous-jacente.
Le modèle d'itérateur relève de la catégorie de modèle comportemental.
la mise en oeuvre
Nous allons créer une interface Iterator qui raconte la méthode de navigation et une interface Container qui retransmet l'itérateur. Les classes concrètes implémentant l' interface Container seront chargées d'implémenter l' interface Iterator et de l'utiliser
IteratorPatternDemo , notre classe de démonstration utilisera NamesRepository , une implémentation de classe concrète pour imprimer un Names stocké en tant que collection dans NamesRepository .
Étape 1
Créez des interfaces.
Iterator.java
public interface Iterator {
public boolean hasNext();
public Object next();
}
Container.java
public interface Container {
public Iterator getIterator();
}
Étape 2
Créez une classe concrète implémentant l' interface Container . Cette classe a la classe interne NameIterator implémentant l' interface Iterator .
NameRepository.java
public class NameRepository implements Container {
public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
Étape 3
Utilisez le NameRepository pour obtenir les noms d'itérateur et d'impression.
IteratorPatternDemo.java
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
Étape 4
Vérifiez la sortie.
Name : Robert
Name : John
Name : Julie
Name : Lora