There are some applications out there where during design time, not all possible use cases are known. There might be new application features coming out from time to time, and in order to implement them, some refactoring has to be done.
This helps us to design our structures separately and then use the visitor design pattern to add functionality on top.
Another case where the visitor design pattern could be useful is if we are building a big object structure with many different types of nodes that support different operations. Instead of creating a base node that has all the operations and only a few of them are implemented by the concrete nodes or use type casting, we could create visitors that will add the functionality we need where we need...