= Solution
The <Iterator pattern> gives clients a uniform way to inspect and consume the elements of a collection without exposing how that collection is stored. An <iterator> has a traversal state separate from the abstract collection interface, so the same client loop can process an <array>, a <linked list> or generated values. \b[It preserves <encapsulation> and <representation independence>]: changing the underlying <data structure> need not change the traversal client. Separate <iterator> instances can track separate traversals; two aliases of one consuming <iterator> instead share its progress.
Back to article page