In my CAD/CAM application I have Paths and Collections of Paths (PathList). Sometimes I have to generate a collection of shapes. Not only I have to generate this particular collection of shapes I have to include it with another collection of shapes. I often need a dozen or more parameters to convey all the information needed to do the calculations.
All shape calculations (simple or complex) in my CAM are funneled a PathList that is sent out to the different machines.
With this design it would best to have some setup that involves adding the result to a single collection.
The Path Visitor fits this nicely. Each shape calculation is encapsulated into it's own class with the properties as complex as the needed.
So the Kitchen Hood Visitor may had 8 shapes to the Pathlist
While the Kitchen Counter Visitor adds 6 shapes.
The drawer Visitor adds a few more.
Then I pass out the resulting PathList to the rest of the system like any other shape generator.
I easily have options by adding another visitor or not running some. For a guy who only wants a counter and drawers, I only need to run two visitors.
The resulting code is very readable which is important when I have revisit this area 3, 5, or 10 years down the line. In addition because of encapsulation changes to one visitor have minimal if any impact on other visitors.
In addition I now have a standardized design pattern to add any new functionality to a PathList by implementing the visitor pattern.
For example it used to be that our property editor only worked on a single path. When we changed to editing multiple paths it was easy to implement custom visitors to do global changes to all paths. It was more readable then using for loops inside of delegates.
But ultimately it comes down to judgment and preference.