## Iterator 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. ### When to use * 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)