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) }