Official description of the Iterator pattern
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
Examples of Iterator can be lists, stacks, trees, etc.
This pattern allows clients to go over elements of different collections in a similar fashion using a single iterator interface.