Está en la página 1de 10

ITERADOR PAT R Ó N D E D I S E Ñ O

F R A N C I S C O J AV I E R D E L A R O S A G Ó M E Z
1810165
PROPÓSITO

• Es un mecanismo de acceso a los elementos que constituyen una estructura de


datos para la utilización de estos sin exponer su estructura interna
MOTIVACIÓN
• Surge del deseo de acceder a los elementos de un contenedor de objetos (por ejemplo, una
lista) sin exponer su representación interna.
• La solución que propone es añadir métodos que permitan recorrer la estructura sin referenciar
explícitamente su representación. La responsabilidad del recorrido se traslada a un objeto
iterador.
• El problema de introducir este objeto iterador reside en que los clientes necesitan conocer la
estructura para crear el iterador apropiado.
• Esto se soluciona generalizando los distintos iteradores en una abstracción y dotando a las
estructuras de datos de un método de fabricación que cree un iterador concreto.
APLICABILIDAD

• Permite el acceso al contenido de una estructura sin exponer su representación


interna. Además diferentes iteradores pueden presentar diferentes tipos de recorrido
sobre la estructura (recorrido de principio a fin, recorrido con saltos...)
• Por otro lado los iteradores no tienen por qué limitarse a recorrer la estructura, sino
que podrían incorporar otro tipo de lógica (por ejemplo, filtrado de elementos).
• Es más, dados diferentes tipos de estructuras, el patrón iterador permite
recorrerlas todas utilizando una interfaz común uniforme.
PARTICIPANTES
• Iterador (Iterator) define la interfaz para recorrer el agregado de elementos y
acceder a ellos, de manera que el cliente no tenga que conocer los detalles y sea
capaz de manejarlos de todos modos.
• Iterador Concreto (ConcreteIterator) implementa la interfaz propuesta por el
Iterador. Es el que se encarga de mantener la posición actual en el recorrido de la
estructura.
• Agregado (Aggregate) define la interfaz para el método de fabricación de
iteradores.
• Agregado Concreto (ConcreteAggregate) implementa la estructura de datos y el
método de fabricación de iteradores que crea un iterador específico para su
estructura.
COLABORACIONES Y
• Un iterador concreto es el encargado CONSECUENCIAS
de guardar la posición actual dentro de
la estructura de datos, interactuando
con esta para calcular el siguiente
elemento del recorrido.
• El patrón Iterador permite por tanto
diferentes tipos de recorrido de un
agregado y varios recorridos
simultáneos, simplificando la interfaz
del agregado.
public class Vector2 {
public int[] _datos;
public Vector2(int valores){
_datos = new int[valores];
for (int i = 0; i < _datos.length; i++){
_datos[i] = 0;
}
}
public int getValor(int pos){
return _datos[pos];
}
public void setValor(int pos, int valor){
_datos[pos] = valor;
}
public int dimension(){
return _datos.length;
}
public IteradorVector iterador(){
return new IteradorVector(this);
}
}
public class IteradorVector{
private int[] _vector;
private int _posicion;

public IteradorVector(Vector2 vector){


_vector = vector._datos;
_posicion = 0;
}

public boolean hasNext(){


if (_posicion < _vector.length)
return true;
else
return false;
}

public Object next(){


int valor = _vector[_posicion];
_posicion++;
return valor;
}
}
public static void main(String argv[]) {
Vector2 vector = new Vector2(5);

//Creación del iterador


IteradorVector iterador = vector.iterador();

//Recorrido con el iterador


while (iterador.hasNext())
System.out.println(iterador.next());
}

También podría gustarte