W3C home > Mailing lists > Public > www-dom@w3.org > July to September 1998

Re: latest DOM spec 19980720

From: Stephen R. Savitzky <steve@crc.ricoh.com>
Date: 21 Jul 1998 17:47:11 -0700
To: Michael Allen <Michael.R.Allen@Eng.Sun.COM>
Cc: www-dom@w3.org
Message-ID: <qcemvehfu8.fsf@gelion.crc.ricoh.com>
Michael Allen <Michael.R.Allen@Eng.Sun.COM> writes:

> 	With all this talk of quickly casting to subclasses from a base
> class reference, I wonder if anyone has ever thought of putting Visitor
> design pattern functionality into Node?  I have also heard the Visitor
> pattern referred to as "double dispatch". 

  [excellent discussion of the pattern snipped.  See also p. 331 in the Gang
   of Four book]

<hit target=forehead implement=hand>of course!</hit>

It still has the problem of having to be extended whenever you add a
subclass to Node, but at least it's better than adding conversion methods to
Node.  Something like the HTMLNodeVisitor could get pretty ugly.

> 	To avoid type checking what kind of NodeVisitor a Node has received,
> you might make NodeVisitor an abstract base class with an Enumerated type
> field which contains an int (or bitfield, maybe) which specifies its type.
> That way, subclasses which the base NodeVisitor doesn't cover could check
> the type of visitors without doing an instanceof test.

I think it would be better to extend NodeVisitor at the same time as you
specialize Node (which, by the way, I notice that the HTML application
doesn't do -- that's a problem):

interface HTMLNode: Node {
  readonly attribute HTMLNode parentHTMLNode;
  ...

  void visit(in HTMLVisitor v)
}
	
> 	Throwing my hat in the ring,

Nice hat.

-- 
 Stephen R. Savitzky   Chief Software Scientist, Ricoh Silicon Valley, Inc., 
<steve@rsv.ricoh.com>                            California Research Center
 voice: 650.496.5710   fax: 650.854.8740    URL: http://rsv.ricoh.com/~steve/
  home: <steve@starport.com> URL: http://www.starport.com/people/steve/
Received on Tuesday, 21 July 1998 20:43:01 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Friday, 22 June 2012 06:13:45 GMT