/media/sda-magnetic/david/Dokumente-15/fernuni-hagen/cs-i-ii/old-cs-2-03/java-new/2020-12-06/MVCProg.java



class Fahnenmast {
    public void addFahnenbeobachter(Fahnenbeobachter neuerbeobachter) {
        // Hinzufuegen eines Fahnenbeobachters. Um die Beobachter zu verwalten,
        // koennte eine java.util.ArrayList dienen.
    }

    public void removeFahnenbeobachter(Fahnenbeobachter neuerbeobachter) {
        // Entfernen eines Fahnenbeobachters.
    }

    public void setStatus(Fahnenposition fahnenposition) {
        // Aendern des Fahnenstatus. Die Fahnenbeobachter sollten hierueber
        // informiert werden.
    }

    public Fahnenposition getFahnenposition() {
        // Zurueckgeben der aktuellen Fahnenposition
    }
}

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 {
    // Interfaces sollte man so schlank wie moeglich halten.
    // Welche Methode(n) wird/werden benoetigt?
}

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