[go: up one dir, main page]

0% found this document useful (0 votes)
10 views5 pages

7b - Visitor in Java

The Visitor design pattern in Java involves creating an accept method in the element hierarchy, defining a visitor base class with visit methods for each element type, and implementing derived visitor classes for specific operations. The document provides code examples illustrating how to implement this pattern using classes like This, That, and TheOther as elements, and UpVisitor and DownVisitor as visitors. The main function demonstrates how to use these visitors to perform operations on the elements.

Uploaded by

wildgreenage
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views5 pages

7b - Visitor in Java

The Visitor design pattern in Java involves creating an accept method in the element hierarchy, defining a visitor base class with visit methods for each element type, and implementing derived visitor classes for specific operations. The document provides code examples illustrating how to implement this pattern using classes like This, That, and TheOther as elements, and UpVisitor and DownVisitor as visitors. The main function demonstrates how to use these visitors to perform operations on the elements.

Uploaded by

wildgreenage
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

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

You might also like