Padrões de Design - Padrão Iterator
O padrão de iterador é um padrão de design muito comumente usado no ambiente de programação Java e .Net. Esse padrão é usado para obter uma maneira de acessar os elementos de um objeto de coleção de maneira sequencial, sem a necessidade de saber sua representação subjacente.
O padrão do iterador se enquadra na categoria de padrão comportamental.
Implementação
Vamos criar uma interface Iterator que narra o método de navegação e uma interface Container que executa novamente o iterador. Classes concretas que implementam a interface Container serão responsáveis por implementar a interface Iterator e usá-la
IteratorPatternDemo , nossa classe de demonstração usará NamesRepository , uma implementação de classe concreta para imprimir um Names armazenado como uma coleção em NamesRepository .
Passo 1
Crie interfaces.
Iterator.java
public interface Iterator {
public boolean hasNext();
public Object next();
}
Container.java
public interface Container {
public Iterator getIterator();
}
Passo 2
Crie uma classe concreta implementando a interface Container . Esta classe possui a classe interna NameIterator que implementa a 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;
}
}
}
etapa 3
Use o NameRepository para obter nomes de iteradores e de impressão.
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);
}
}
}
Passo 4
Verifique a saída.
Name : Robert
Name : John
Name : Julie
Name : Lora