Unlike iterators that support external iteration of the internal structure
of the collection, a visitor can avoid these disadvantages by
turning the design "inside out."
Rather than provide an iterator for use by external code, the external code can
implement the following Visitor interface.