Title: CDMA Project
1The Visitor Design Pattern
"'Tis some visitor," I muttered, "tapping at my
chamber door Only this and nothing more."
Edgar Allen Poe, The Raven
2Outline
Introduction Scenario 1 Scenario 2 Scenario
3 Conclusion Questions Answers
Ikbal R. Houssaini , ikbal_at_uchicago.edu
Jun Wu, wujunuc_at_hotmail.com
Last updated Sunday, Feb 17, 2002
3Scenario 1
Houses with distinct characteristics
Different kind/level of maintenance and repairs
jobs required
4Scenario 1
5Scenario 1
6Scenario 1
7Scenario 1
8Scenario 1
9Introduction
- Motivation
- Can be used to provide an extension to an object
hierarchy. - The Visitor abstract class defines methods which
will be called whenever an instance of a Visitor
is passed to an element in another hierarchy. - Element defines the base class for a hierarchy
which knows how to deal with Visitors. The
accept() method in the element takes an instance
of a Visitor and calls its methods.
Solution The Visitor Pattern is used to represent
an operation to be performed on the elements of
an object structure. Visitors are great ways to
extend an existing class hierarchy.
Problem You need to add a new method to a
hierarchy of classes, but the act of adding it
will be painful or damaging to the design.
- Purpose
- behavioral focus is on interaction and
responsibility distribution - Scope
- object focus is on dynamic run-time
relationships (assembly)
10Introduction
11Scenario 2
- Hierarchy of modem objects
The base class has the generic methods common to
all modems
The derivatives represent the drivers for many
different modem manufacturers and types
You have a requirement to add a new method to the
hierarchy to configure the modem to work with the
Unix operating system
Source http//www.cuj.com/java/
12Scenario 2
1 2 3 4
13Scenario 2
1 2 3 4
14Scenario 2
public interface Modem public void
dial(String pno) public void hangup() public
void send(char c) public char recv() public
void accept(ModemVisitor v) public
interface ModemVisitor public void
visit(HayesModem modem) public void
visit(MotModem modem) public void
visit(ErnieModem modem)
1 2 3 4
15Scenario 2
public class HayesModem implements Modem
public void dial(String pno) public void
hangup() public void send(char c) public
char recv() return 0 public void
accept(ModemVisitor v) v.visit(this) String
configurationString null
1 2 3 4
16Scenario 2
public class UnixModemConfigurator implements
ModemVisitor public void visit(HayesModem m)
m.configurationString "s14D3"
public void visit(MotModem m)
m.configurationValue 42
1 2 3 4
17Scenario 3
- Real world example in the telecom industry
Visitor used in Composite hierarchy.
18Scenario 3
CP (Client)
Data Packet ....
1 2 3
DSA (Server)
19Scenario 3
Connection
Container
RsrcPool 1
RsrcPool 2
RsrcPool 3
ElemPool 1
ElemPool 2
ElemPool 3
1 2 3
Rsrc
Rsrc
Rsrc
Rsrc
Rsrc
Elem3
Elem1
Elem2
Elem3
Elem1
20Scenario 3
Connection
Container
Visitor
ElemPool 1
ElemPool 2
ElemPool 3
Op 2
Op 1
1 2 3
Rsrc
Rsrc
Rsrc
Rsrc
Rsrc
Elem3
Elem1
Elem2
Elem3
Elem1
21Scenario 3
Container accept(visitor1)
Visitor 1 visit(elemPool1) op1()
visit(elemPool2) op2() visit(elem2)
op3()
Visitor 2 visit(elemPool1) op4()
visit(elem1) op5()
ElemPool 1 accept(visitor1) visit(this)
ElemPool 2 accept(visitor1) visit(this)
1 2 3
Elem1 accept(visitor1) visit(this)
Elem2 accept(visitor1) visit(this)
22End
Conclusion
Conclusion
- PROS
- Multi-Dispatch capability
- New operations easy to add.
- Gathers related operations into one place.
- Visiting across hierarchies is easy.
- Weakness
- Adding Element classes is hard
- May force more features into the public interface
than is desirable.
A related pattern Interpreter - distribute code
over class Hierarchy Vs. Visitor - centralize
code in single class
23 Q