Ich habe Schwierigkeiten, das zu verstehen. Im Grunde wird diese Lookup-API verwendet, um lose gekoppelte Intermodul-Natur beizubehalten. Also im Grunde ein Service-Provider und Consumer-Module können miteinander kommunizieren mit Hilfe der Lookup-API korrekt?
Aber was ich nicht verstehe, ist:
ist Lookup wie eine Tasche voller welche Objekte für diese Klasse? Kann jemand eine einfachere Analogie geben?
Also die Abhängigkeiten erstellt, und Sie implementieren den LookupListener im Service-Consumer korrekt? Offensichtlich hat der Verbraucher Abhängigkeit vom Anbieter.
Was ist dann die Implementierung von LookupListener? Es ist ein eigenes Lookup? Wenn also eine Karte der Klasse eines anderen Moduls vorhanden ist, wird sie als ein Objekt innerhalb der Suche der Implementierung von LookupListener?
gespeichertAlso ist Lookup wie eine Tasche, die die Klassen eines anderen Moduls und seine Methoden speichern kann?
Ist das der richtige Prozess, um eine Auswahl zu bestimmen?
associateLookup(Lookups.singleton(fff));
nochmal, Verwirrung mit dieser Zeile: was macht associateLookup()
genau? result = Utilities.actionsGlobalContext().lookupResult(Browser1.class);
Was macht diese Zeile? Was ist das Ergebnis? enthält es die Klasse Browser1 (aus anderem Modul)? result.addLookupListener (this)
; Warum würden Sie Listener zum Ergebnis hinzufügen? und was hören wir und warum auf der TopComponent?
Fertig?
Und schließlich, um meine Verwirrung zu fördern, wie kommt Node API ins Spiel?
Sie können sich Lookups als grundlegendes Werkzeug vorstellen, das loses Koppeln mit hohem Kohäsionsprinzip unterstützt.
Grundsätzlich haben Sie eine API in beverage-api
module:
Dann ein anderes Modul beers
, das von beverage-api
abhängt:
in einem anderen Modul, das auch von beverage-api
abhängt, können Sie eine Zauberformel schreiben:
Hier erhalten Sie eine Liste aller Getränkeanbieter, ohne eine genaue Abhängigkeit von der jeweiligen Klasse zu erklären oder von diesem Modul abhängig zu sein. Das ist großartig, Ihr Code hängt nicht von einer bestimmten Implementierung ab, es reicht aus, diese Module im Klassenpfad zu haben und sie werden "automatisch" in Ihre Anwendung geladen.
associateLookup(Lookups.singleton(fff));
nochmal, Verwirrung mit dieser Zeile: was genau tut associateLookup ()?
Ja, das ist verwirrend. Im Grunde genommen fügen Sie manuell ein Objekt zum Suchsystem hinzu.
result = Utilities.actionsGlobalContext().lookupResult(Beverage.class);
Utilities.actionsGlobalContext()
bezieht sich auf die aktuell ausgewählte (aktive) TopCompoment
. Es wird eine Instanz von Beverage.class
zurückgegeben, wenn sie in der aktiven Komponente vorhanden ist. Wenn Sie alle Instanzen einer bestimmten Klasse verwenden möchten, sollten Sie lookupAll()
verwenden.
result.addLookupListener(this);
Warum würden Sie Listener zum Ergebnis hinzufügen?
Um Benachrichtigungen über Änderungen zu erhalten. Wenn der Benutzer einige Beverages
-Objekte auswählt, löst er LookupListener
method:
und result.allInstances();
geben zurück, welche Instanzen ausgewählt wurden.
Tags und Links java netbeans netbeans-platform