[jdom-interest] Design Patterns - Visitor

Trimmer, Todd todd.trimmer at trizetto.com
Wed May 2 13:40:28 PDT 2001

Oops! Forgot to change the subject the first time I sent to this. I am
resending so that it will be in the proper thread and in case the list
daemon auto-filters messages that accidentally reply to a digest.


Write your walker class that has to deal with all the various JDOM classes
(Element, CDATA, Comment, etc.). Now rewrite that same class that only has
to deal with a base Node class. Which was easier?

With Node, I can have an Iterator feed Nodes to a Visitor that only cares
about Nodes as Nodes, that is, it never has to downcast. This way I never
have to pay for downcasting if I never use it. Now let's say I have other
Visitors that DO care about specific type. I can use the exact same Iterator
and place all the casting code in the Visitor. Now, I only pay if I need to.

Todd Trimmer

-----Original Message-----
From: "Paul Philion" <philion at acmerocket.com>
To: <jdom-interest at jdom.org>
Subject: RE: [jdom-interest] Design Patterns - Visitor
Date: Wed, 2 May 2001 13:38:44 -0400

Frank -

I beg to differ: There are several ways to skin the Visitor, and
(personally) I try to stay away from the method you describe below.

I don't want my visited objects to implement any special interface, and I
use an implementation of the Visitor that does not require it. In my
Visitor, there are three significant actors:

- The object structure being "visited".
- A walker class that traverses the objects being visited, based on the
object structure.
- A visitor class them implements a "visit" method.

Given this structure, the walker can vary independently of the visitor,
allowing the structure to be traversed in a number of different ways, and
possibly implementing some level of filtering. The visitor class is
responsible for actually doing something with the visited object.

- Paul Philion

More information about the jdom-interest mailing list