Definição
O Iterator pattern fornece uma maneira de acessar os elementos de um
objeto agregado seqüencialmente sem expor sua base de representação.
Também conhecido como cursor.
Quando usar
Use para acessar os elementos de um objeto agregado seqüencialmente.
coleções de Java como ArrayList e HashMap implementaram o padrão iterador.
Benefícios
• O iterador pode ser utilizado para diferentes agregados.
• Permite-lhe percorrer o agregado de diferentes maneiras, dependendo da sua
necessidades.
• Ele encapsula a estrutura interna de como a interação ocorre.
• Não precisa engordar a sua classe com operações de percursos diferentes.
Desvantagens / consequências
Não é um segmento seguro a menos que seu iterador seja robusto e que permita inserções e exclusões. Isso pode ser ser resolvido, permitindo que o Iterator use um Memento para capturar o estado de uma iteração.
Exemplo
Este exemplo mostra como você pode escrever seu próprio iterador.
import java.util.*;
public class BitSetIterator implements Iterator<Boolean> {
private final BitSet bitset;
private int index;
public BitSetIterator(BitSet bitset) {
this.bitset = bitset;
}
public boolean hasNext() {
return index < bitset.length();
}
public Boolean next() {
if (index >= bitset.length()) {
throw new NoSuchElementException();
}
boolean b = bitset.get(index++);
return new Boolean(b);
}
public void remove() {
throw new UnsupportedOperationException();
}
}
public class TestClientBitSet {
public static void main(String[] args) {
// Cria bit e define alguns bits
BitSet bitset = new BitSet();
bitset.set(1);
bitset.set(19);
bitset.set(20);
bitset.set(47);
BitSetIterator iter = new BitSetIterator(bitset);
while (iter.hasNext()) {
Boolean b = iter.next();
String tf = (b.booleanValue() ? "T" : "F");
System.out.print(tf);
}
System.out.println();
}
}
Quando TestClientBitSet é executado, o resultado é:
FTFFFFFFFFFFFFFFFFFTTFFFFFFFFFFFFFFFFFFFFFFFFFFT
Exemplo de uso
Este exemplo mostra como o Iterator do ArrayList é usado.
import java.util.*;
public class TestClientIterator {
public static void main(String[] args) {
ArrayList<Object> al = new ArrayList<Object>();
al.add(new Integer(42));
al.add(new String("test"));
al.add(new Double("-12.34"));
for(Iterator<Object> iter = al.iterator() ; iter.hasNext(); )
System.out.println( iter.next() );
// sintaxe JEE5
for(Object o:al)
System.out.println( o );
}
}
Quando executado, o resultado é:
42
test
-12.34
42
test
-12.34
Nenhum comentário:
Postar um comentário