java textfield - Was ist der Zweck eines Delegationsmusters?




placeholder jtextfield (4)

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.


Answers

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.


Nach effektivem Java (von Joshua Bloch) ist die Komposition günstiger als die Vererbung. Die Zusammensetzung hat mehrere Vorteile gegenüber der Vererbung. Eine der Intuitionen dafür lautet wie folgt: Betrachten Sie eine Unterklasse, die von einer Basisklasse erbt. Jede Änderung in der Basisklasse macht die Unterklasse fragil, da die Unterklasse von der Basisklasse abhängt. Durch die Verwendung der Vererbung machen wir eine Bindung an die Unterklasse abhängig von der Basisklasse, die unseren Code fragil macht. Durch die Verwendung der Komposition können wir diese Einschränkung jedoch entfernen. Die Komposition wird durchgeführt, indem eine 'has-a-Beziehung' zwischen den Klassen anstelle einer 'is-a' -Verbindung wie bei der Vererbung festgelegt wird. "Delegate pattern" und "Decorator pattern" sind Beispiele dafür, wie Komposition erreicht werden kann. Vielleicht möchten Sie das Kapitel "Zusammensetzung vs Vererbung" im effektiven Java-Buch lesen, da es ziemlich informativ ist.

Für eine kürzere Erklärung können Sie auf diesen Artikel verweisen: http://javarevisited.blogspot.com/2013/06/why-favor-composition-over-inheritance-java-oops-design.html


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 ).

I still think after java 1.5, enum is the best available singleton implementation available as it also ensures that even in the multi threaded environments - only one instance is created.

public enum Singleton{ INSTANCE; }

and you are done !!!







java android design-patterns delegation