Iterator
Propósito
Según el libro "Patrones de Diseño" [29] el patrón Iterator "proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna".
También conocido como
Cursor
Estructura

Participantes
Iterador:
define una interfaz para recorrer los elementos y acceder a ellos.
IteradorConcreto:
implementa la interfaz Iterador.
mantiene la posición actual en el recorrido del agregado.
Agregado:
define una interfaz para crear una variable Iterador.
AgregadoConcreto:
implementa la interfaz de creación de Iterador para devolver una variable del IteradorConcreto apropiado.
Implementación
No se observan impedimentos y/o modificaciones de la estructura original del patrón para su implementación en Go.
El Iterador y Agregado se definen como interfaces por simplificación.
Código de ejemplo
En este ejemplo queremos recorrer las distintas estaciones de radio preseteadas de un estéreo de audio.
Implementación:
// Iterador Interface
type Iterador interface {
Valor() string
Siguiente()
Anterior()
}
// Agregado Interface
type Agregado interface {
CrearIterador() Iterador
}
// Agregado Concreto
type Radio struct {
Estaciones []string
}
func (r *Radio) CrearIterador() Iterador {
return &RadioIterador{radio: r}
}
func (r *Radio) Registrar(estacion string) {
r.Estaciones = append(r.Estaciones, estacion)
}
// Iterador Concreto
type RadioIterador struct {
radio *Radio
indice int
}
func (ri *RadioIterador) Valor() string {
return ri.radio.Estaciones[ri.indice]
}
func (ri *RadioIterador) Siguiente() {
ri.indice++
}
func (ri *RadioIterador) Anterior() {
ri.indice--
}
Se puede probar la implementación del patrón de la siguiente forma:
radio := &Radio{}
radio.Registrar("FM100")
radio.Registrar("FM200")
radio.Registrar("FM300")
iterador := radio.CrearIterador()
fmt.Printf("Escuhando la radio %s\n", iterador.Valor())
iterador.Siguiente()
fmt.Printf("Escuhando la radio %s\n", iterador.Valor())
iterador.Siguiente()
fmt.Printf("Escuhando la radio %s\n", iterador.Valor())
iterador.Anterior()
fmt.Printf("Escuhando nuevamente la radio %s\n", iterador.Valor())
Código de ejemplo | Ejecutar código
Atención: Esta publicación se encuentra abandonada. Puede acceder a la versión vigente en https://leanpub.com/designpatternsingo
Última actualización
¿Te fue útil?