Reason to use: 
- Represents 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.
https://www.oodesign.com/visitor-pattern.html
