Objective: Learn Iterator Design Pattern. What is Iterator Design Pattern? It is a behavioural design pattern. Provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation. When to use the Iterator Design Patter? - 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 (that is, to support polymorphic iteration) Why do we use Iterator Design Pattern? - It supports variations in the traversal of an aggregate. Complex aggregates may be traversed in many ways. Iterators make it easy to change the traversal algorithm. - Iterators simplify the Aggregate interface. Iterator's traversal interface obviates the need for a similar interface in Aggregate, thereby simplifying the aggregate's interface. - More than one traversal can be pending on an aggregate. An iterator keeps track of its own traversal state. Therefore you can have more than one traversal in progress at once. Provide an example of Iterator Design Pattern. It might have been taught differently in lecture, follow that if the examples conflict. But here is another example of the design patter: https://github.com/bhowmikp/design-patterns/tree/master/behavioral_patterns/iterator