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:
“Farewell? a long farewell to all my greatness.
This is the state of man; today he puts forth
The tender leaves of hopes, tomorrow blossoms,
And bears his blushing honors thick upon him:
The third day comes a frost, a killing frost,
And when he thinks, good easy man, full surely
His greatness is a-ripening, nips his root,
And then he falls as I do.”
—William Shakespeare (15641616)
“Me, rule? Me, place the State under my law, when my feeble reason no longer rules even myself!”
—Jean Racine (16391699)
“If there is a gratification which I envy any people in this world it is to your country [Italy] its music. This is the favorite passion of my soul, and fortune has cast my lot in a country where it is in a state of deplorable barbarism.”
—Thomas Jefferson (17431826)