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;
}
});
}
}
Aufgaben: schreibe ähnliche Methoden für
Operation.binary (new Zahlenfolge(1,1,0,1)) ==> 13