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