/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-03/java-new/2020-12-06/Fahnentest.java


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