The Iterator design pattern solves problems like:
How can the elements of an aggregate object be accessed and traversed
without exposing its underlying representation?
See Applicability section for all problems Iterator can solve. See Solution section for how Iterator solves the problems.