Visitor
From CSSEMediaWiki
(Difference between revisions)
(→Structure) |
|||
Line 28: | Line 28: | ||
[[image:VisitorCommunications.JPG|frame|centre|'''Figure 2: A [[UML 2.1]] [[Communication diagram|communication diagram]] describing the interactions between objects in the Visitor pattern''']] | [[image:VisitorCommunications.JPG|frame|centre|'''Figure 2: A [[UML 2.1]] [[Communication diagram|communication diagram]] describing the interactions between objects in the Visitor pattern''']] | ||
+ | ==Consequences== | ||
+ | ===Benefits=== | ||
+ | #Adding new operations is easy. Just add a new Visitor class | ||
+ | #Separates unrelated behaviours and gathers related ones | ||
+ | #Visit across more than one class hierarchy | ||
+ | ===Liabilities=== | ||
+ | #Adding a new ConreteElement is difficult | ||
+ | #Elements may expose otherwise private attributes |
Revision as of 06:16, 19 August 2008
Contents |
Introduction
The Visitor is a behavioural pattern. It allows the designer to define new operations on an object structure and its elements, without modifying the object structure itself.
Structure
The Visitor describes the relations between three distinct classes:
- ObjectStructure - Provides a visitor with access to its elements
- Element - Accepts visits.
- Visitor - Accesses an element to perform operations.
Figure 1 graphically describes these Visitor pattern relationships.
Communication
The Visitor pattern allows a visitor object to access and perform operations on an element object. A summary of the Visitor pattern communications is given in Fig. 2. Here the following interactions are shown:
- Sequence 1 - The object aVisitor1 performs an operation on anElementA
- Sequence 2 - The object aVisitor2 performs an operation on anElementB
- Sequence 3 - The object aVisitor1 performs an operation on anElementA
- Sequence 4 - The object aVisitor2 performs an operation on anElementB
Consequences
Benefits
- Adding new operations is easy. Just add a new Visitor class
- Separates unrelated behaviours and gathers related ones
- Visit across more than one class hierarchy
Liabilities
- Adding a new ConreteElement is difficult
- Elements may expose otherwise private attributes