State
Aside from potentially improving separation of concerns, the visitor pattern has an additional advantage over simply calling a polymorphic method: a visitor object can have state. This is extremely useful in many cases where the action performed on the object depends on previous such actions.
An example of this is a pretty-printer in a programming language implementation (such as a compiler or interpreter). Such a pretty-printer object (implemented as a visitor, in this example), will visit nodes in a data structure that represents a parsed and processed program. The pretty-printer will then generate a textual representation of the program tree. To make the representation human-readable, the pretty-printer should properly indent program statements and expressions. The current indentation level can then be tracked by the visitor as its state, correctly applying encapsulation, whereas in a simple polymorphic method invocation, the indentation level would have to be exposed as a parameter and the caller would rely on the method implementation to use and propagate this parameter correctly.
Read more about this topic: Visitor Pattern
Famous quotes containing the word state:
“Having behind us the producing masses of this nation and the world, supported by the commercial interests, the labor interests, and the toilers everywhere, we will answer their demand for a gold standard by saying to them: You shall not press down upon the brow of labor this crown of thorns, you shall not crucify mankind upon a cross of gold.”
—Administration in the State of Neva, U.S. public relief program (1935-1943)
“Alas, why would you heap this care on me?
I am unfit for state and majesty.
I do beseech you take it not amiss,
I cannot nor I will not yield to you.”
—William Shakespeare (15641616)
“While the State exists there can be no freedom; when there is freedom there will be no State.”
—Vladimir Ilyich Lenin (18701924)