Use the Iterator pattern when…

You are iterating over a collection and one of these conditions holds:
  • There are various ways of traversing it (several enumerators).
  • There are different collections for the same kind of traversing.
  • Different filters and orderings might apply.