Behavior Design Pattern: Iterator

Iterator adalah behavioral design pattern yang memungkinkan melakukan sequential traversal melalui struktur data yang kompleks tanpa mengekspos detail internalnya.

Ide utama dari Iterator pattern adalah memisahkan logika iterasi menjadi object tersendiri yang akan menyediakan generic method untuk melakukan iterasi yang tidak tergantung pada tipe object.

Berikut contoh penerapan pattern iterator dalam golang.

package main

import "fmt"

//collection
type collection interface {
	createIterator() iterator
}

//concrete collection
type userCollection struct {
	users []*user
}

func (u *userCollection) createIterator() iterator {
	return &userIterator{
		users: u.users,
	}
}

//iterator
type iterator interface {
	hasNext() bool
	getNext() *user
}

//concrete iterator
type userIterator struct {
	index int
	users []*user
}

func (u *userIterator) hasNext() bool {
	if u.index < len(u.users) {
		return true
	}
	return false

}
func (u *userIterator) getNext() *user {
	if u.hasNext() {
		user := u.users[u.index]
		u.index++
		return user
	}
	return nil
}

//client code
type user struct {
	name string
	age  int
}

func main() {

	user1 := &user{
		name: "a",
		age:  30,
	}
	user2 := &user{
		name: "b",
		age:  20,
	}

	userCollection := &userCollection{
		users: []*user{user1, user2},
	}

	iterator := userCollection.createIterator()

	for iterator.hasNext() {
		user := iterator.getNext()
		fmt.Printf("User is %+v\n", user)
	}
}
Sharing is caring:

Leave a Comment