Name: Visitor Intent: - extend the functionality of a family of classes without modifying the classes themselves - functionality is often virtual - the family of classes is often a composite Structure: - there is a method call "accept" in the base class of the family - there is an interface "Visitor" with an overloaded method "visit" for each concrete subclass of the family - method "accept" is overriden in each concrete subclass of the family - sometimes "visit" calls "accept" Notes: - modifying the family becomes much more difficult - it looks like virtual method are pulled out of thei classes - must understand differences betwen overload and override - also called double dispatch