Iterator Pattern provides a universal interface for accessing internal elements of an aggregate without exposing the underlying data structure. A typical iterator contains the following methods or getters:
first()
: moves the cursor to the first element in the aggregatesnext()
: moves the cursor to the next elementend
: a getter that returns a Boolean indicates whether the cursor is at the enditem
: a getter that returns the element at the position of the current cursorindex
: a getter that returns the index of the element at the current cursor
Iterators for aggregates with different interfaces or underlying structures usually end with different implementations as shown in the following figure:
Though the client does not have to worry about the structure of an aggregate, an iterator would certainly need to. Assuming we have everything we need to build an iterator, there could be a variety of ways for creating one. The factory method is widely used when creating iterators...