Definition
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
Explanation
In object-oriented programming, the iterator pattern is a design pattern in which an iterator is used to traverse a container and access the container’s elements. The iterator pattern decouples algorithms from containers; in some cases, algorithms are necessarily container-specific and thus cannot be decoupled.
Iterators that traverse all elements of a container, very often, form the base for more specific Iterators that allow for filtering. The .NET Framework Linq to Objects is a good example of that.
Screencast
TypeScript Code
module Iterator { interface IEnumerable { [index: number]: T; length: number; } interface IIterator { reset(): void; moveNext(): boolean current: T; } export class Enumerator implements IIterator { protected _index: number; protected _items: IEnumerable; protected _max: number; constructor(items: IEnumerable) { this._items = items; this.reset(); } public reset(): void { this._index = -1; this._max = this._items.length - 1; } public moveNext(): boolean { return (this._index++ < this._max); } get current(): T { if (this._index < 0 || this._index > this._max) { throw new Error("Invalid operation."); } return this._items[this._index]; } } window.addEventListener("load", function () { var persons = new Array("Wesley", "Norbert", "Sam", "Sridhar"); var h2Nodes = document.getElementsByTagName("h2"); Output.WriteLine("Iterating through the array."); var enumerator = new Enumerator(persons); while (enumerator.moveNext()) { Output.WriteLine(enumerator.current); } Output.WriteLine("Iterating through a NodeListOf<HTMLHeadingElement>."); var nodesEnumerator = new Enumerator(h2Nodes); while (nodesEnumerator.moveNext()) { Output.WriteLine(nodesEnumerator.current.textContent); } }); }
Output