3 Stimmen

Java-Schnittstelle Observable

Ich habe folgendes:

  1. Ein Java-Klasse: ClassA implementiert Observer

  2. Ein Java-Interface: Inter (erweitert Observable, nicht möglich)

  3. Ein Java-Klasse: ClassB implementiert Inter erweitert Observable

  4. Ein Java-Klasse: ClassC implementiert Inter erweitert Observable

Jetzt ist der Code für ClassA etwa wie folgt.

ClassA{
    Inter anyClass = new ClassB();
           //oder es könnte sein
    Inter anyClass = new ClassC();
    //Inter.addObserver(this); //nicht möglich, da Interface Observable nicht erweitern kann
}

Wenn also ein bestimmtes Ereignis in ClassB oder ClassC auftritt, möchte ich, dass ClassA davon erfährt. Ich habe daran gedacht, den Observer/Observable zu verwenden, aber das Problem ist, dass das Interface nicht Observable erweitern kann.

Wenn jemand die Frage versteht, bitte helfen Sie mir einen Weg zu finden, um ClassA zu aktualisieren, wenn etwas in ClassB oder ClassC passiert.

5voto

Jap Mul Punkte 16128

Sie müssen nicht speziell die eingebaute Observer/Observable-Java-Implementierung verwenden. Sie können Ihre eigenen Schnittstellen erstellen, um das Observer-Muster zu verwenden.

Erstellen Sie eine Schnittstelle Observer mit der Methode 'update' oder 'notify' (oder so etwas), die für KlasseA verwendet wird

verwenden Sie dann die 'Inter'-Schnittstelle, um als Observable zu fungieren, stellen Sie sicher, dass sie folgendes implementiert:

- registerObserver(Observer)
- unregisterObserver(Observer)
- notifyObservers() //(oder updateObservers(), der die update/notify-Methode für alle registrierten Beobachter aufruft)

Stellen Sie sicher, dass Klassen, die die 'Inter'-Schnittstelle implementieren, auch ein Arraylist namens observerCollection haben, um die Beobachter zu verfolgen. Jedes Mal, wenn sich in KlasseB oder KlasseC etwas ändert und Sie KlasseA (den Beobachter) informieren möchten, können Sie notifyObservers() aufrufen, um es wissen zu lassen.

Werfen Sie einen Blick darauf, was mit dem Beobachtermuster passiert: http://en.wikipedia.org/wiki/File:Observer.svg

2voto

Ale Zalazar Punkte 1860

Bei den Bedingungen 3 und 4 gehe ich davon aus, dass Observable eine Klasse ist, da ClassB und ClassC sie erweitern. Warum platzieren Sie die addObserver-Methode nicht in der Observable-Klasse? Dann könnten Sie Instanzen von ClassB oder ClassC einer Observable anyClass-Variablen zuweisen und den Beobachter über die addObserver-Methode registrieren:

ClassA implementiert Observer {
    Observable anyClassB = new ClassB();
       //oder es könnte
    Observable anyClassC = new ClassC();
    anyClassB.addObserver(this);
    anyClassC.addObserver(this);
}

2voto

Seraphin Punkte 91

Definieren Sie einfach Ihr eigenes Interface IObservable mit den entsprechenden Methoden addObserver und deleteObserver:

public interface IObservable {
    void addObserver(Observer o);    
    void deleteObserver(Observer o);    
}

Ihr Interface kann dieses IObservable Interface erweitern:

public interface inter extends IObservable {
...
}

In Ihrer Klasse A und B werden die Methoden addObserver und deleteObserver von der Observable Klasse geerbt und müssen nicht neu definiert werden.

public class A extends Observable implements inter {
...
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X