interface Tree<K> { }
class Leaf<K> implements Tree<K> {
Leaf(K key) { .. } }
class Branch<K> implements Tree<K> {
Branch(Tree<K> left, Tree<K> right) { .. } }
für jeden Teilnehmer des Kompositums eine Methode:
interface Visitor<K,R> { // mit Resultattyp R
R leaf (K x);
R branch (R left, R right); }
der Gastgeber (Baumknoten) nimmt Besucher auf:
interface Tree<K> {
<R> R receive (Visitor<K,R> v) }