Einzelnen Beitrag anzeigen

Benutzerbild von memphis
memphis

Registriert seit: 4. Apr 2003
Ort: Innsbruck
89 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 19. Sep 2008, 19:26
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.
Lukas
Wenn du nicht mehr weiter weißt, zeichne dir 'nen Einheitskreis.
  Mit Zitat antworten Zitat