Klasse für Zahlenfolgen:
public class Zahlenfolge { private final List<Integer> contents; // Konstruktor mit variabler Argumentzahl public Zahlenfolge(Integer ... xs) { this.contents = new LinkedList<Integer>(); this.contents.addAll(Arrays.asList(xs)); } // TODO: wird delegiert public void add (int x) { } // TODO: wird delegiert public String toString() { } // TODO, soll Folge [ lo, lo + 1 .. hi - 1 ] erzeugen public static Zahlenfolge range (int lo, int hi) { } }testen:
public class Main { public static void main(String[] args) { Zahlenfolge f = Zahlenfolge.range(0, 10); System.out.println (f); } }Definition eines Besucher-Objektes (inneres Interface)
class Zahlenfolge { ... public interface Visitor { int empty(); int nonempty(int previous_result, int element); } }Behandlung eines Besuchers
class Zahlenfolge { ... public int visit(Visitor v) { int accu = v.empty(); for (int x : this.contents) { accu = v.nonempty(accu, x); } return accu; } }Beispiel:
public class Operation { static int summe (Zahlenfolge f) { return f.visit(new Zahlenfolge.Visitor() { public int empty() { return 0; } public int nonempty(int previous_result, int element) { return previous_result + element; } }); } }