Hola, hoy quiero compartir algo contigo. Por ejemplo, esto se usa mucho en JavaScript. Voy a hablar de devoluciones de llamada. ¿Sabes cuándo y cómo utilizar esto? ¿Realmente comprende su uso en el entorno Java? Cuando me hice estas preguntas, fue por eso que comencé a investigar esto. La idea detrás de esto es la inversión de control (PD: la explicación de Wikipedia es inversión de control, abreviada como IoC), que es un principio de diseño en programación orientada a objetos que se puede utilizar para reducir el acoplamiento entre códigos de computadora. Este ejemplo. describe cómo funciona el marco, basado también en el conocido "principio de Hollywood: no me llames, nosotros te llamaremos".
Utilice el patrón de devolución de llamada simple en Java para comprenderlo. Los ejemplos específicos son los siguientes:
interfaz CallBack { void métodoToCallBack();}clase CallBackImpl implementa CallBack { público void métodoToCallBack() { System.out.println("Me han devuelto la llamada }}clase Llamador { registro público vacío(devolución de llamada) { devolución de llamada"); .methodToCallBack(); } public static void main(String[] args) { Llamador = nuevo Llamador callBack = nuevo; CallBackImpl(); llamador.register(callBack);
Quizás quieras preguntarme cuándo usar esto o cuál es la diferencia entre llamada directa y mecanismo de devolución de llamada.
La respuesta es: Bueno, este ejemplo simplemente le muestra cómo construir una función de devolución de llamada en el entorno Java. Por supuesto, no tiene sentido usarlo de esa manera. Examinémoslo ahora con más detalle.
La idea que contiene es la inversión del control. Usemos un temporizador como ejemplo de la vida real. Suponga que sabe que hay un temporizador especial que admite devoluciones de llamadas cada hora. Para ser precisos, significa que cada hora, el temporizador llamará al método de llamada que usted registró.
Ejemplos específicos:
Queremos actualizar el sitio web cada hora. Aquí está el modelo UML para el ejemplo:
Interfaz de devolución de llamada:
Primero definamos la interfaz de devolución de llamada:
import java.util.ArrayList;import java.util.List;// Por ejemplo: supongamos que su sistema operativo ofrece esta interfaz para implementarlainterface TimeUpdaterCallBack { void updateTime(long time);}// esta es su implementación./ / por ejemplo: desea actualizar la hora de su sitio web cada horaclass WebSiteTimeUpdaterCallBack implements TimeUpdaterCallBack { @Override public void updateTime(long time) { // imprime la hora actualizada en cualquier lugar del ejemplo de su sitio web System.out.println(time }});
En nuestro ejemplo, el temporizador del sistema admite métodos de devolución de llamada:
// Este es el SystemTimer implementado por su sistema operativo (SO) // No sabe cómo se implementó este temporizador. Este ejemplo simplemente // le muestra cómo se podría implementar una // devolución de llamada. usted mismo si lo desea.class SystemTimer { List<TimeUpdaterCallBack> callbacks = new ArrayList<TimeUpdaterCallBack>(); timerCallBack) { callbacks.add(timerCallBack); } // ... Este SystemTimer puede tener más lógica aquí, no lo sabemos... // En algún momento de la implementación de este SystemTimer (no lo sabes) / / se llamará a este método y se llamará a cada timerCallBack registrado. Cada timerCallBack registrado puede tener una implementación totalmente // diferente del método updateTime() y puede ser // utilizado de diferentes maneras por diferentes clientes. oneHourHasBeenExprired() { para (TimeUpdaterCallBack timerCallBack: devoluciones de llamada) { timerCallBack.updateTime(System.currentTimeMillis());
Finalmente, aquí está el actualizador de hora del sitio web en nuestro sencillo ejemplo ficticio:
// Este es nuestro cliente. Se utilizará en nuestro ejemplo de sitio web. Actualizará // la hora del sitio web cada hora. class WebSiteTimeUpdater { public static void main(String[] args) { SystemTimer SystemTimer = new SystemTimer(); webSiteCallBackUpdater = nuevo WebSiteTimeUpdaterCallBack(); SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater }}
Texto original: http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java.html