¿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?
- Serialización y des-serialización de android.graphics.Bitmap en Java
- Android Studio AndroidManifest.xml vs build.gradle
- Android HttpClient y Cookies
- Escribir datos ZipEntry a cadena
- Enviar texto a través de Bluetooth desde Java Server a Android Client
Edit: ListenerDelegate
está en la línea 487 y los métodos en cuestión están alrededor de la línea 1054.
- Cómo administrar el número de subprocesos dentro de la tarea de sincronización
- Ejecución Animación y conmutador de imágenes al mismo tiempo
- Diferencia entre Android and Looper
- Diferenciación de la compilación de depuración y producción de una aplicación para Android
- Android PackageStats da valores negativos
- ¿Cuál es el uso de los métodos setDoOutput & setDoInput de la clase HttpURLConnection
- Mantenga el elemento de lista highlite con SimpleCursorAdapter
- Mostrar icono de emoción en Android TextView a través de caracteres Unicode u otra forma
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 interfazIterator
. La clase tiene un métodohasNext()
que delega aenumeration.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 tenerstart()
,openWindow()
ybrake()
, 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.
- DialogFragment y fuerza para mostrar el teclado
- ¿Cómo puedo administrar correctamente los volúmenes de audio en mi aplicación de Android?