Design Patterns - Pattern Iteratore

Il pattern Iterator è un design pattern molto comunemente usato negli ambienti di programmazione Java e .Net. Questo modello viene utilizzato per ottenere un modo per accedere agli elementi di un oggetto di raccolta in modo sequenziale senza alcuna necessità di conoscere la sua rappresentazione sottostante.

Il modello iteratore rientra nella categoria del modello comportamentale.

Implementazione

Creeremo un'interfaccia Iterator che narra il metodo di navigazione e un'interfaccia Container che riattiva l'iteratore. Le classi concrete che implementano l' interfaccia Container saranno responsabili dell'implementazione dell'interfaccia Iterator e del suo utilizzo

IteratorPatternDemo , la nostra classe demo utilizzerà NamesRepository , un'implementazione di una classe concreta per stampare un Names archiviato come raccolta in NamesRepository .

Passo 1

Crea interfacce.

Iterator.java

public interface Iterator {
   public boolean hasNext();
   public Object next();
}

Container.java

public interface Container {
   public Iterator getIterator();
}

Passo 2

Crea una classe concreta che implementa l' interfaccia del contenitore . Questa classe ha la classe interna NameIterator che implementa l' interfaccia 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;
      }		
   }
}

Passaggio 3

Usa il NameRepository per ottenere l'iteratore e stampare i nomi.

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);
      } 	
   }
}

Passaggio 4

Verifica l'output.

Name : Robert
Name : John
Name : Julie
Name : Lora