Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.
PerfectJPattern's componentized version of the Visitor Pattern differs from the original GoF version in that:
IVisitor<E> type 
        	for each new Concrete Element type. The AbstractVisitor<E>.visit(<E>) method or its 
        	static variation reusableVisit handle all Element subtypes via double-dispatch.
        	accept(...) method. 
        	AbstractVisitor<E> implementation that provides the 
        	double-dispatch mechanism implemented on top of PerfectJPattern's Delegates. Adding new Concrete Visitor 
        	is as simple as extending AbstractVisitor<E> (or otherwise reusing the static 
        	reusableVisit implementation) and implementing the relevant visitXXX(...) methods 
        	for each Element subtype of interest. Concrete Visitors' visit method names may be chosen freely, though a 
        	good convention would be to use visitXXX(...) but it is not compulsory.