Hallo,
ich würde es mit dem
Observer-Pattern lösen (Die EventListener bzw. ActionListener sind im Grunde genau das selbe, nur eben speziell an Swing/AWT Komponenten angepasst).
Als erstes definierst du dir ein Interface (den sogenannten Listener), welches deine Ereignisse beinhaltet:
Code:
interface KundeListener{
public void onAddKonto(Kunde source); //event. auch eine eigene Klasse KundeEvent als Parameter
(...)
}
Deine Klasse Kunde ergänzt du um zwei Methoden, welches es dir erlauben einen KundeListener zu registrieren bzw. zu entfernen:
Code:
class Kunde{
(...)
private Vector<KundeListener> listeners = new Vector<KundeListener>();
public void addKundeListener(KundeListener listener) {
listeners.add(listener);
}
public void removeKundeListener(KundeListener listener) {
listeners.remove(listener);
}
//alle registrierten Listener benachrichtigen
private void fireAddKontoEvent() {
Iterator<KundeListener > iter = listeners.iterator();
while (iter.hasNext()) {
((KundeListener ) iter.next()).onAddKonto(this);
}
}
}
Bei deiner AddKonto Methode löst du das Event aus, in dem du alle registrierten Listener benachrichtigst:
Code:
/*
* Konto dem Kunden hinzufügen
*/
public void addKonto(Konto konto)
{
_konten.add(konto);
fireAddKontoEvent();
}
Damit hast du eigentlich schon das Observer-Pattern implementiert. Nun ist es möglich, einen eigenen KundeListener zu implementieren und zu registrieren.
Code:
public class testKunde implements KundeListener
public void main(String args[]){
Kunde kunde = new Kunde();
kunde.addKundeListener(this);
kunde.addKonto(new Konto());
}
public void onAddKonto(Kunde source){
System.out.println("Neus Konto zu Kunde " + source.getName() + " hinzugefügt..");
}
}
Der Quellcode ist nicht getestet, dürfte aber vom Prinzip her stimmen (ich hoffe deine Java-Kenntnisse reichen aus..).
Wenn du willst, kann ich dir nach dem Wochenende auch ein komplettes Beispiel hochladen.
Schönen Abend,
lukas.