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