Modul A kann Modul B aufrufen, ohne von Modul B abhängig zu sein, wenn es interface
definiert und eine Methode bereitstellt, die Modul B aufrufen kann, um ein Callback-Objekt zu übergeben, das die Schnittstelle implementiert.
Angenommen, ich habe die Foobar Bibliothek definiert sind, und nehmen wir an, dass der Status der Foobar Bibliothek wegen irgendeines externen Ereignisses ändern könnte. Wenn die Bibliothek Kunde will bewusst Statusänderungen sein, konnte ich einen Rückruf Mechanismus zur Verfügung stellen:
interface StatusCallback {
void statusChange(Status status);
}
class Foobar {
...
void registerStatusCallback(StatusCallback statusCallback);
...
}
Der Client verwendet es eine Instanz schaffen, die StatusCallback
implments, um es in die Bibliothek bereitstellt:
Foobar foobar = ...;
statusCallback = new StatusCallback() {
void statusChange(Status status) {
...do something with changed status...
}
};
foobar.registerStatusCallback(statusCallback);
Sobald das externe Ereignis eintritt und sich der Status ändert, ruft die Bibliothek die Methode statusChange(status)
des Clients auf. Der Bibliotheksquellcode hat jedoch keine Abhängigkeit vom Clientcode.
Können Sie näher darauf eingehen? Ich habe nicht viel verstanden .. – user5636236
@ user5636236, siehe meine erweiterte Antwort, oben. –