Visitor Design Pattern in Java http://sourcemaking.
com/design_patterns/Visitor/java/1
Design Patterns Book (/design-patterns
/ Design Patterns (/design_patterns)
/ Behavioral patterns (/design_patterns
/behavioral_patterns)
/ Visitor (/design_patterns/visitor)
Visitor in Java
Back to Visitor description
(/design_patterns/visitor)
Visitor design pattern
1. Add an accept(Visitor) method to the "element"
hierarchy
2. Create a "visitor" base class w/ a visit() method for
every "element" type
3. Create a "visitor" derived class for each "operation" to
do on "elements"
4. Client creates "visitor" objects and passes each to
accept() calls
1 sur 5 15-03-18 10:36 AM
Visitor Design Pattern in Java http://sourcemaking.com/design_patterns/Visitor/java/1
interface Element { Java
// 1. accept(Visitor) interface
public void accept( Visitor v ); // first dispatch
}
class This implements Element {
// 1. accept(Visitor) implementation
public void accept( Visitor v ) {
v.visit( this );
}
public String thiss() {
return "This";
}
}
class That implements Element {
public void accept( Visitor v ) {
v.visit( this );
}
public String that() {
return "That";
}
}
class TheOther implements Element {
public void accept( Visitor v ) {
v.visit( this );
}
public String theOther() {
return "TheOther";
}
}
// 2. Create a "visitor" base class with a visit() method for every "eleme
interface Visitor {
public void visit( This e ); // second dispatch
public void visit( That e );
public void visit( TheOther e );
}
// 3. Create a "visitor" derived class for each "operation" to perform on
class UpVisitor implements Visitor {
public void visit( This e ) {
System.out.println( "do Up on " + e.thiss() );
}
public void visit( That e ) {
System.out.println( "do Up on " + e.that() );
}
public void visit( TheOther e ) {
System.out.println( "do Up on " + e.theOther() );
}
}
class DownVisitor implements Visitor {
public void visit( This e ) {
System.out.println( "do Down on " + e.thiss() );
}
public void visit( That e ) {
System.out.println( "do Down on " + e.that() );
2 sur 5 15-03-18 10:36 AM
Visitor Design Pattern in Java http://sourcemaking.com/design_patterns/Visitor/java/1
}
public void visit( TheOther e ) {
System.out.println( "do Down on " + e.theOther() );
}
}
class VisitorDemo {
public static Element[] list = { new This(), new That()
// 4. Client creates "visitor" objects and passes each to accept() call
public static void main( String[] args ) {
UpVisitor up = new UpVisitor();
DownVisitor down = new DownVisitor();
for (int i=0; i < list.length; i++) {
list[i].accept( up );
}
for (int i=0; i < list.length; i++) {
list[i].accept( down );
}
}
}
do Up on This do Down on This Output
do Up on That do Down on That
do Up on TheOther do Down on TheOther
Read next
This article is taken from our
book Design Patterns
Explained Simply
(/design-patterns-
simply).
All of the design patterns are
compiled there. The book is
written in clear, simple
language that makes it easy
to read and understand (just
like this article).
(/design-patterns-simply)
We distribute it in PDF &
EPUB formats so you can get it onto your iPad, Kindle, or
other portable device immediately after your purchase.
Learn more (/design-patterns-simply)
3 sur 5 15-03-18 10:36 AM
Visitor Design Pattern in Java http://sourcemaking.com/design_patterns/Visitor/java/1
Other Visitor examples
Java Visitor Visitor Visitor Visitor
in in in in
Java Java Java Java:
←☺ (/design_patterns
(/design_patterns
Double
/visitor /visitor dispatch
/java/4) /java/3) (within
a
single
hierarchy)
(/design_patterns
/visitor
/java/2)
C# Visitor
in C#
(/design_patterns
/visitor
/c-sharp-
dot-net)
C++ Visitor Visitor Visitor
in in in
C++: C++: C++
Before Recovering (/design_patterns
and lost /visitor
after type /cpp/2)
(/design_patterns
information
/visitor (/design_patterns
/cpp/1) /visitor
/cpp/3)
PHP Visitor
in
PHP
(/design_patterns
/visitor/php)
Delphi Visitor
in
Delphi
(/design_patterns
/visitor
/delphi)
Template Visitor
Method (/design_patterns
(/design_patterns /visitor)
/template_method)
This work is licensed under a Creative Commons
Attribution-Noncommercial-No Derivative Works 3.0
Unported License (http://creativecommons.org/licenses
/licenses/by-nc-nd/3.0/)
(http://creativecommons.org /by-nc-nd/3.0/)
Design Patterns (/design_patterns) My account (/user)
AntiPatterns (/antipatterns) Refactoring (/refactoring) Contacts (/contact)
4 sur 5 15-03-18 10:36 AM
Visitor Design Pattern in Java http://sourcemaking.com/design_patterns/Visitor/java/1
UML (/uml) About us (/about-us)
720 Tweet 1,088 Recommend 1.5k
5 sur 5 15-03-18 10:36 AM