«interface»
Shape
+ accept(v)
Circle
+ accept(v)
Square
+ accept(v)
«interface»
Visitor
+ visitCircle(c)
+ visitSquare(s)
AreaVisitor
Double dispatch
1interface Shape { void accept(Visitor v); }2interface Visitor { void visitCircle(Circle c); void visitSquare(Square s); }3class Circle implements Shape { void accept(Visitor v){ v.visitCircle(this); } }4class AreaVisitor implements Visitor { double visitCircle(Circle c){...} }
State
elementjust accept(v)