import java.util.ArrayList;
class Fahnenmast {
ArrayList <Fahnenbeobachter> myList = new ArrayList <Fahnenbeobachter> ();
Fahnenposition pos = Fahnenposition.UNBEFLAGGT;
public void addFahnenbeobachter(Fahnenbeobachter neuerbeobachter) {
myList.add (neuerbeobachter);
// Hinzufuegen eines Fahnenbeobachters. Um die Beobachter zu verwalten,
// koennte eine java.util.ArrayList dienen.
}
public void removeFahnenbeobachter(Fahnenbeobachter neuerbeobachter) {
// Entfernen eines Fahnenbeobachters.
myList.remove (neuerbeobachter);
}
public void setStatus(Fahnenposition fahnenposition) {
// Aendern des Fahnenstatus. Die Fahnenbeobachter sollten hierueber
// informiert werden.
pos = fahnenposition;
}
public Fahnenposition getFahnenposition() {
// Zurueckgeben der aktuellen Fahnenposition
return pos;
}
}
enum Fahnenposition {
OBEN, HALBMAST, UNBEFLAGGT;
}
// Der View
class Tourist implements Fahnenbeobachter {
private String name = "Unbekannt";
public Tourist(String name) {
this.name = name;
}
public void fahnenstatusGeaendert(Fahnenmast fahnenmast) {
System.out.println(name + " vermeldet fuer den Fahnenmast: "
+ fahnenmast.getFahnenposition());
}
}
interface Fahnenbeobachter {
public void fahnenstatusGeaendert (Fahnenmast fahnenmast);
}
class Fahnenbedienung {
private Fahnenmast fahnenmast;
public Fahnenbedienung(Fahnenmast fahnenmast) {
this.fahnenmast = fahnenmast;
}
public void aendereBeflaggung(Fahnenposition fahnenposition) {
fahnenmast.setStatus(fahnenposition);
}
}
public class Fahnentest {
public static void main(String[] args) {
Fahnenmast meinFahnenmast = new Fahnenmast();
Fahnenbedienung bedienung1 = new Fahnenbedienung(meinFahnenmast);
Fahnenbedienung bedienung2 = new Fahnenbedienung(meinFahnenmast);
Fahnenbeobachter anna = new Tourist("Anna");
Fahnenbeobachter bernd = new Tourist("Bernd");
Fahnenbeobachter charly = new Tourist("Charly");
bedienung1.aendereBeflaggung(Fahnenposition.OBEN);
meinFahnenmast.addFahnenbeobachter(bernd);
/* Hier Teilaufgabe d) */
bedienung1.aendereBeflaggung(Fahnenposition.HALBMAST);
meinFahnenmast.addFahnenbeobachter(anna);
meinFahnenmast.addFahnenbeobachter(charly);
meinFahnenmast.removeFahnenbeobachter(bernd);
bedienung2.aendereBeflaggung(Fahnenposition.UNBEFLAGGT);
bedienung2.aendereBeflaggung(Fahnenposition.OBEN);
meinFahnenmast.addFahnenbeobachter(bernd);
}
}