cspp 51023 "'tis some visitor," i muttered, "tapping at my chamber door; only...
Post on 19-Dec-2015
213 views
TRANSCRIPT
![Page 1: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/1.jpg)
CSPP 51023
"'Tis some visitor," I muttered, "tapping at my chamber door;
Only this and nothing more."— Edgar Allen Poe, The Raven
The Visitor Design Pattern
![Page 2: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/2.jpg)
CSPP 51023
Ikbal R. Houssaini , [email protected]
Introduction
Scenario 1
Scenario 2
Scenario 3
Conclusion
Questions & Answers
Outline
Last updated: Sunday, Feb 17, 2002Jun Wu, [email protected]
![Page 3: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/3.jpg)
Scenario 1Homeowners CommunityHouses with distinct characteristics
Different kind/level of maintenance and repairs jobs required
![Page 4: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/4.jpg)
CSPP 51023
Scenario 1Scenario 1
![Page 5: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/5.jpg)
CSPP 51023
Scenario 1Scenario 1
![Page 6: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/6.jpg)
CSPP 51023
Scenario 1Scenario 1
![Page 7: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/7.jpg)
CSPP 51023
Scenario 1Scenario 1
![Page 8: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/8.jpg)
CSPP 51023
Scenario 1Scenario 1
![Page 9: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/9.jpg)
IntroductionProblem
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.
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.
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.
Purpose
behavioral: focus is on interaction and responsibility distribution
Scope
object: focus is on dynamic run-time relationships (assembly)
![Page 10: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/10.jpg)
Introduction
NodeType2
Accept (NodeVisitor)accessOperation()
NodeVisitor
VisitorOp1VisitorOp2
VisitNodeType1(NodeType1)VisitNodeType2(NodeType2)...
Client
NodeType1
Accept (NodeVisitor)accessOperation()
Node
Accept (NodeVisitor)accessOperation()
![Page 11: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/11.jpg)
Scenario 2Hierarchy of modem objectsThe base class has the generic methods common to all modems
You have a requirement to add a new method to the hierarchy to configure the modem to work with the Unix operating system
The derivatives represent the drivers for many different modem manufacturers and types
Source: http://www.cuj.com/java/
![Page 12: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/12.jpg)
CSPP 51023
1
2
3
4
Scenario 2Scenario 2
USR
![Page 13: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/13.jpg)
CSPP 51023
1
2
3
4
Scenario 2Scenario 2
visit (MOT)
![Page 14: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/14.jpg)
CSPP 51023
1
2
3
4
Scenario 2Scenario 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);
}
![Page 15: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/15.jpg)
CSPP 51023
1
2
3
4
Scenario 2Scenario 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;
}
![Page 16: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/16.jpg)
CSPP 51023
1
23 4
Scenario 2Scenario 2
public class UnixModemConfigurator implements ModemVisitor
{
public void visit(HayesModem m)
{ m.configurationString = "&s1=4&D=3"; }
public void visit(MotModem m)
{ m.configurationValue = 42; }
}
![Page 17: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/17.jpg)
Scenario 3Real world example in the telecom industry
Visitor used in Composite hierarchy.
![Page 18: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/18.jpg)
CSPP 51023
1
2
3
Scenario 3Scenario 3
CP
(Client)
DSA
(Server)
Data Packet
{
....
…
}
![Page 19: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/19.jpg)
CSPP 51023
1
2
3
Scenario 3Scenario 3
Connection
RsrcPool 1 RsrcPool 2 RsrcPool 3
RsrcRsrc Rsrc Rsrc Rsrc
Container
ElemPool 1 ElemPool 2 ElemPool 3
Elem3Elem1 Elem2 Elem3 Elem1
---@
---@
---@
---@
---@
---@
---@---
@
---@
![Page 20: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/20.jpg)
CSPP 51023
1
2
3
Scenario 3Scenario 3
Connection
RsrcRsrc Rsrc Rsrc Rsrc
Container
ElemPool 1 ElemPool 2 ElemPool 3
Elem3Elem1 Elem2 Elem3 Elem1
Visitor
Op 2Op 1
---@
---@
---@
![Page 21: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/21.jpg)
CSPP 51023
1
2
3
Scenario 3Scenario 3Container
accept(&visitor1)
ElemPool 1
accept(&visitor1) {
visit(this) }
Elem1
accept(&visitor1){
visit(this) }
ElemPool 2
accept(&visitor1) {
visit(this) }
Elem2
accept(&visitor1){
visit(this) }
Visitor 1
visit(elemPool1) {
op1()… }
visit(elemPool2) {
op2()… }
visit(elem2) {
op3()… }
…
Visitor 2
visit(elemPool1) {
op4()… }
visit(elem1) {
op5()… }
…
![Page 22: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/22.jpg)
Conclusion
End
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
![Page 23: CSPP 51023 "'Tis some visitor," I muttered, "tapping at my chamber door; Only this and nothing more." — Edgar Allen Poe, The Raven The Visitor Design](https://reader036.vdocuments.us/reader036/viewer/2022070323/56649d405503460f94a1975f/html5/thumbnails/23.jpg)
AQ &&