Ich habe ein Design Problem.
Angenommen ich möchte Funktionen über mehrere Werte x1, x2, ..., xn ausrechnen. Zum Beispiel gibt es eine Funktion Mittelwert f1, eine Funktion Median f2, usw. Ich möchte dabei von Problem zu Problem entscheiden, welche Funktionen ich ausrechne.
Dazu nehme ich ein Interface
Die Mittelwert-Funktion kann dann so aussehen:
Nun gibt es Funktionen die auf anderen Berechnungen beruhen, zum Beispiel ist f3 der Mittelwert von der Folge z1 = sin(x1) + cos(x2), ...., zn = sin(xn) + cos(xn) und f4 ist der Median von z1, ..., zn.
Ich möchte, dass f3 und f4 das Interface Function implementieren. Wenn ich sowohl f3 als auch f4 benötige, möchte ich jedoch sin+cos nur einmal für jeden Wert x1, ...xn berechnen. Zum Beispiel möchte ich die Werte
mean = f1(x1, ...., xn),
median = f2(x1, ...., xn),
sin+cos mean = f3(x1, ...., xn),
sin+cos median = f4(x1, ...., xn)
nach erscheinen jedes neuen Wertes xi auf der Konsole ausgeben lassen und dabei nur einmal sin+cos für jedes xi berechnen.
Hinweis: Das Problem ist aufbereitet. Das eigentliche Problem ist etwas komplexer und vor allem habe ich statt sin+cos wesentlich komplexere Berechnungen, die man nur einmal ausführen sollte.
Angenommen ich möchte Funktionen über mehrere Werte x1, x2, ..., xn ausrechnen. Zum Beispiel gibt es eine Funktion Mittelwert f1, eine Funktion Median f2, usw. Ich möchte dabei von Problem zu Problem entscheiden, welche Funktionen ich ausrechne.
Dazu nehme ich ein Interface
Java:
public interface Function {
// records the next value
public void update(double x);
// returns the function value
public double apply();
}
Die Mittelwert-Funktion kann dann so aussehen:
Java:
public class f1 implements Function { // Mean
private double mean;
private int n;
public void update(double x) {
mean = n*mean/(n+1) + x/(n+1);
n++;
}
public double apply() {
return mean;
}
}
Nun gibt es Funktionen die auf anderen Berechnungen beruhen, zum Beispiel ist f3 der Mittelwert von der Folge z1 = sin(x1) + cos(x2), ...., zn = sin(xn) + cos(xn) und f4 ist der Median von z1, ..., zn.
Ich möchte, dass f3 und f4 das Interface Function implementieren. Wenn ich sowohl f3 als auch f4 benötige, möchte ich jedoch sin+cos nur einmal für jeden Wert x1, ...xn berechnen. Zum Beispiel möchte ich die Werte
mean = f1(x1, ...., xn),
median = f2(x1, ...., xn),
sin+cos mean = f3(x1, ...., xn),
sin+cos median = f4(x1, ...., xn)
nach erscheinen jedes neuen Wertes xi auf der Konsole ausgeben lassen und dabei nur einmal sin+cos für jedes xi berechnen.
Hinweis: Das Problem ist aufbereitet. Das eigentliche Problem ist etwas komplexer und vor allem habe ich statt sin+cos wesentlich komplexere Berechnungen, die man nur einmal ausführen sollte.
Zuletzt bearbeitet: