Hallo, ich hab da ein minderschweres Umsetzungsproblem beim Thema Observer. Zu Beginn erstmal die Ausgangslage: Ich habe derzeit 4 Klassen und ein Interface, eine Main- (Verwaltungsklasse), eine Professur-, Lehrveranstaltungs- und eine Loggerklasse. Das Interface habe ich AddDataListener genannt mit der Methode dataAdded. Nun will ich, sobald eine neue Professur oder eine neue Lehrveranstaltung angelegt wird in einer Datei diese Änderung speichern. Dabei soll das ganze über Listener erfolgen.
Allerdings verstehe ich die Umsetzung des ganzen noch nicht richtig. Ich habe jetzt in meiner Mainklasse eine ArrayList vom Typ AddDataListener angelegt. In dieser Main wird dann am Ende der Methode zum Anlegen der Professur eine Methode fireDataAdded aufgerufen in der der für jedes Element der ArrayList vom Typ AddDataListener die Methode dataAdded aufgerufen wird. In der Klasse Logger wird dann einfach die Methode überschrieben.
Nun der relevante Quelltext:
Ist der Aufbau so ersteinmal richtig oder ist das schon etwas falsch?
MfG
Allerdings verstehe ich die Umsetzung des ganzen noch nicht richtig. Ich habe jetzt in meiner Mainklasse eine ArrayList vom Typ AddDataListener angelegt. In dieser Main wird dann am Ende der Methode zum Anlegen der Professur eine Methode fireDataAdded aufgerufen in der der für jedes Element der ArrayList vom Typ AddDataListener die Methode dataAdded aufgerufen wird. In der Klasse Logger wird dann einfach die Methode überschrieben.
Nun der relevante Quelltext:
Java:
public class Main {
TreeMap<String, Professur> prof;
SimpleInput in;
int auswahl; //Menü-Auswahl Variable
ArrayList<AddDataListener> ad;
public Main () {
prof = new TreeMap<String, Professur>();
in = new SimpleInput();
auswahl = 0;
ad = new ArrayList<AddDataListener>();
}
public void profAnlegen () {
Professur anlProf = new Professur();
boolean flag = false;
String key = in.readString("Kuerzel der Professur: ");
do {
for (String search : prof.keySet()) {
if (search.equals(key)) {
flag = false;
break;
}
else {
flag = true;
}
}
if (!flag) {
System.out.println("Kuerzel ist bereits vergeben.");
key = in.readString("Kuerzel der Professur: ");
}
} while (!flag);
String pBez = in.readString("Name der Professur: ");
String pMail = in.readString("E-Mail Adresse der Professur: ");
int mAnz = in.readInt("Mitarbeiterzahl: ");
anlProf.setKuerzel(key);
anlProf.setName(pBez);
anlProf.setMail(pMail);
anlProf.setMitarbeiterzahl(mAnz);
prof.put(key, anlProf);
fireDataAdded(key);
}
public void addListener (AddDataListener adl) { //gehört die Methode hier rein?
ad.add(adl);
}
public void removeListener (AddDataListener adl) { //gehört die Methode hier rein?
ad.remove(adl);
}
private void fireDataAdded (String kuerzel) {
for (AddDataListener a : ad) {
a.dataAdded(kuerzel);
}
}
public static void main (String[] args) {
Main r = new Main();
r.go();
}
}
Java:
public interface AddDataListener {
public void dataAdded (String kuerzel);
}
Java:
public class Logger implements AddDataListener {
@Override
public void dataAdded(String kuerzel) {
FileWriter fw;
PrintWriter pw;
BufferedWriter bw;
try {
fw = new FileWriter("Aenderungen.txt");
bw = new BufferedWriter(fw);
pw = new PrintWriter(bw);
pw.println("Daten für die Professur mit dem Kuerzel "+kuerzel+" hinzugefügt");
} catch (Exception e) {
e.getMessage();
}
}
}
Ist der Aufbau so ersteinmal richtig oder ist das schon etwas falsch?
MfG