Iterator pattern has behavioral purpose and applies to objects. The pattern provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
- to access an aggregate object's contents without exposing its internal representation
- to support multiple traversals of aggregate objects
- to provide a uniform interface for traversing different aggregate structures (to support polymorphic iteration)