¿Cuál es el propósito de un patrón de delegación?

Yo estaba buscando a través de la fuente de SensorManager en Android y encontró que cuando usted registra un SensorEventListener el SensorManager pasa el control del oyente a un ListenerDelegate .

Sólo traigo esto como un ejemplo. Leí el artículo de Wikipedia sobre la programación de delegados, pero todavía no estoy seguro de su propósito. ¿Por qué usar un "delegado"? ¿Cómo ayuda al flujo de control de un programa? ¿Cuáles son las desventajas de usar (o no) uno? ¿Es más práctico para usar con los oyentes?

Edit: ListenerDelegate está en la línea 487 y los métodos en cuestión están alrededor de la línea 1054.

3 Solutions collect form web for “¿Cuál es el propósito de un patrón de delegación?”

Delegación no es exactamente un "patrón de diseño" en el sentido utilizado en el libro GoF. Es útil en una serie de escenarios, y es una base para otros patrones

  • Cuando desea realizar algunas acciones adicionales antes / después de delegar (que es el patrón Decorator, pero se basa en la delegación). Por ejemplo, Collections.synchronizedList(..) crea una nueva colección que delega a la original, pero tiene sus métodos sincronizados.
  • Cuando tiene interfaces incompatibles y desea adaptar una a la otra (el patrón del adaptador). Obtiene el objeto original y delega a él desde métodos que se ajustan a la interfaz deseada. Por ejemplo, hay la clase EnumerationIterator , que adapta las enumeraciones a la interfaz Iterator . La clase tiene un método hasNext() que delega a enumeration.hasMoreElements()
  • Cuando desea ocultar algo de complejidad del usuario de su clase, puede tener métodos que delegan a diferentes trabajadores reales. Por ejemplo, un Car puede tener start() , openWindow() y brake() , pero cada uno de estos métodos delegará en el motor, el.windows y el sistema de frenado ( véase también este )

Según Java eficaz (por Joshua Blosch), la composición es favorable sobre la herencia. La composición tiene varias ventajas sobre la herencia. Una de las intuiciones para esto es la siguiente: Considere una subclase que hereda de una clase base. Así que cualquier cambio en la clase base hará que la subclase sea frágil ya que la subclase depende de la clase base. Por lo que mediante el uso de la herencia, estamos haciendo un enlace a la subclase para depender de la clase base, lo que hace que nuestro código frágil. Mediante el uso de la composición, podemos eliminar esta limitación. La composición se realiza estableciendo una relación entre las clases en lugar de la relación is-a como en la herencia. 'Patrón delegado' y 'Patrón decorador' son ejemplos de cómo se puede lograr la composición. Es posible que desee leer el capítulo sobre 'composición vs herencia' en el libro java eficaz, ya que es muy informativo.

Para una explicación más breve, puede consultar este artículo: http://javarevisited.blogspot.com/2013/06/why-favor-composition-over-inheritance-java-oops-design.html

El patrón delegado se utiliza para que alguien más realice el trabajo, por ejemplo, en su ejemplo, el SensorManager no va a saber cómo hacer lo que cada oyente quiere, pero sólo quiere un programa que escuche el sensor.

Así, hay oyentes creados llamando a registerListener en el SensorManager , y estos oyentes se pasan la información y luego puede decidir qué hacer con los datos de los sensores.

  • Cómo cargar dinámicamente R.styleable recurso?
  • Prueba de Android "ro.build.date.utc" warning
  • Error de Android Studio: "La variable de entorno no apunta a una instalación de JVM válida"
  • ¿Cómo implementar la función .get con FutureTask o BackgroundTask usando android?
  • Tablas personalizadas de Chrome Oauth2 Flow
  • ¿Qué pasó con Android aapt?
  • ¿Dónde se detendrá el código cuando se muera la aplicación desde el Administrador de tareas de Android
  • Java y la metodología de prueba de Android
  • Downcasting de Serializable a LinkedList <Class>
  • No se admiten expresiones Lambda -source 1.7 (Android Studio)
  • Android: ¿Cómo pausar y reanudar un temporizador de cuenta atrás?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.