iterator 패턴은 반복문 중에 for 문을 추상화 한 패턴이고, 어떠한 배열을 반복하여 처리하는 경우 사용된다.
구현부는 숨기면서 해당 배열 데이터에 접근할 수 있도록 해준다.
javascript 의 generator 의 동작방식을 생각해보면 비슷하다.
간단한 배열에 대한 순회를 iterator패턴을 이용해 구현하면 설계가 지나치게 복잡해질 수 있다.
class Iterator {
constructor(data) {
this.index = 0;
this.data = data;
}
next () {
const value = this.data[this.index];
this.index++;
const done = !this.hasNext();
return {
value,
done,
}
}
hasNext() {
return this.index < this.data.length;
}
}
const iterator = new Iterator([1,2,3,4]);
iterator.next(); // { value: 1, done: true }
iterator.hasNext(); // true
iterator.next(); // { value: 2, done: true }
iterator.hasNext(); // true
iterator.next(); // { value: 3, done: true }
iterator.hasNext(); // true
iterator.next(); // { value: 4, done: true }
iterator.hasNext(); // false
iterator.next(); // { value: undefined, done: false }