java - jtextfield hint




Was ist der Zweck eines Delegationsmusters? (2)

Das Delegiertenmuster wird verwendet, damit jemand anderes die Arbeit tatsächlich SensorManager In diesem Beispiel wird der SensorManager also nicht wissen, wie man das tut, was jeder Zuhörer wünscht, sondern nur ein Programm, das auf den Sensor hört.

Daher werden Listener erstellt, indem registerListener auf dem SensorManager , und diese Listener werden die Informationen übergeben und können dann entscheiden, was mit den Daten von den Sensoren zu tun ist.

Ich habe die Quelle zum SensorManager in Android SensorManager und festgestellt, dass der SensorManager die Kontrolle über den Listener an einen ListenerDelegate übergibt, wenn Sie einen SensorEventListener registrieren.

Ich erwähne das nur als Beispiel. Ich habe den Wikipedia-Artikel über die Programmierung von Delegierten gelesen, aber ich bin mir immer noch nicht sicher über seinen Zweck. Warum sollte man einen "Delegierten" benutzen? Wie hilft es dem Kontrollfluss eines Programms? Was sind die Nachteile der Verwendung (oder nicht) eines? Ist es am praktischsten für den Zuhörer?

Edit: ListenerDelegate ist in Zeile 487 und die fraglichen Methoden sind um Zeile 1054.


Delegation ist nicht gerade ein "Design-Muster" in dem Sinne, wie es im GoF-Buch verwendet wird. Es ist in einer Anzahl von Szenarien nützlich und ist eine Basis für andere Muster

  • wenn Sie vor / nach der Delegierung einige zusätzliche Aktionen ausführen möchten (das ist das Decorator-Muster, aber es basiert auf Delegierung). Beispielsweise erstellt Collections.synchronizedList(..) eine neue Sammlung, die an die ursprüngliche Gruppe delegiert, deren Methoden jedoch synchronisiert sind.
  • wenn Sie inkompatible Schnittstellen haben und Sie einander anpassen möchten (das Adaptermuster). Sie erhalten das ursprüngliche Objekt und delegieren von Methoden, die der gewünschten Schnittstelle entsprechen. Zum Beispiel gibt es die EnumerationIterator Klasse, die Enumerationen an die Iterator Schnittstelle anpasst. Die Klasse verfügt über eine hasNext() -Methode, die an enumeration.hasMoreElements() delegiert.
  • Wenn Sie eine gewisse Komplexität vor dem Benutzer Ihrer Klasse verbergen möchten, können Sie Methoden verwenden, die an verschiedene tatsächliche Worker delegieren. Zum Beispiel kann ein Car start() , openWindow() und brake() , aber jede dieser Methoden wird tatsächlich an den Motor, el.windows und das Bremssystem delegieren ( siehe auch das ).




delegation