Bonjour, aujourd'hui je souhaite partager quelque chose avec vous. Par exemple, ceci est beaucoup utilisé en JavaScript. Je vais parler des rappels. Savez-vous quand et comment l'utiliser ? Comprenez-vous vraiment son utilisation dans l’environnement Java ? Quand je me suis posé ces questions, c'est pourquoi j'ai commencé mes recherches. L'idée derrière cela est l'inversion du contrôle (PS : l'explication de Wikipédia est l'inversion du contrôle, en abrégé IoC), qui est un principe de conception en programmation orientée objet qui peut être utilisé pour réduire le couplage entre les codes informatiques. décrit le fonctionnement du framework, également basé sur le "principe hollywoodien - Ne m'appelez pas, nous vous appellerons" bien connu.
Utilisez le modèle de rappel simple en Java pour le comprendre. Les exemples spécifiques sont les suivants :
interface CallBack { void methodToCallBack();}class CallBackImpl implémente CallBack { public void methodToCallBack() { System.out.println("J'ai été rappelé");}class Caller { public void register(CallBack callback) { callback .methodToCallBack(); } public static void main(String[] args) { Appelant appelant = new CallBack callBack = new CallBackImpl(); caller.register(callBack);
Vous voudrez peut-être me demander quand utiliser ceci ou quelle est la différence entre le mécanisme d'appel direct et le mécanisme de rappel ?
La réponse est : Eh bien, cet exemple vous montre simplement comment construire une telle fonction de rappel dans l'environnement Java. Bien sûr, cela ne sert à rien de l’utiliser de cette façon. Examinons-le maintenant plus en détail.
L’idée en elle est l’inversion du contrôle. Utilisons une minuterie comme exemple concret. Supposons que vous sachiez qu'il existe une minuterie spéciale qui prend en charge les rappels horaires. Pour être précis, cela signifie que toutes les heures, le minuteur appellera la méthode d'appel que vous avez enregistrée.
Exemples spécifiques :
Nous souhaitons mettre à jour le site Web toutes les heures. Voici le modèle UML pour l'exemple :
Interface de rappel :
Définissons d'abord l'interface de rappel :
import java.util.ArrayList;import java.util.List;// Par exemple : supposons que cette interface soit proposée par votre système d'exploitation pour être implémentéeinterface TimeUpdaterCallBack { void updateTime(long time);}// il s'agit de votre implémentation./ / par exemple : Vous souhaitez mettre à jour l'heure de votre site Web toutes les heures. n'importe où dans l'exemple de votre site Web System.out.println(time }});
Dans notre exemple, le timer système prend en charge les méthodes de rappel :
// Il s'agit du SystemTimer implémenté par votre système d'exploitation (OS) // Vous ne savez pas comment ce timer a été implémenté. Cet exemple vous montre simplement à quoi cela pourrait ressembler // à quoi vous pourriez implémenter un rappel. vous-même si vous le souhaitez.class SystemTimer { List<TimeUpdaterCallBack> callbacks = new ArrayList<TimeUpdaterCallBack>(); timerCallBack) { callbacks.add(timerCallBack); } // ... Ce SystemTimer peut avoir plus de logique ici, nous ne le savons pas ... // À un moment donné de l'implémentation de ce SystemTimer (vous ne savez pas) / / cette méthode sera appelée et chaque timerCallBack enregistré // sera appelé. Chaque timerCallBack enregistré peut avoir une implémentation totalement // différente de la méthode updateTime() et être // utilisée de différentes manières par différents clients public void. oneHourHasBeenExprired() { for (TimeUpdaterCallBack timerCallBack : rappels) { timerCallBack.updateTime(System.currentTimeMillis() } }});
Enfin, voici le programme de mise à jour de l’heure du site Web dans notre exemple simple et factice :
// Ceci est notre client. Il sera utilisé dans notre exemple WebSite. Il mettra à jour // l'heure du site Web toutes les heures. class WebSiteTimeUpdater { public static void main(String[] args) { SystemTimer SystemTimer = new SystemTimer(); webSiteCallBackUpdater = new WebSiteTimeUpdaterCallBack(); SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater }});
Texte original : http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java.html