Una callback è un riferimento a un’azione eseguibile (non l’azione stessa) di solito è passata come argomento a un’altra funzione. È come se ci passiamo un telecomando e indiciamo “questo è illuminare le luci”; Quando lo premi, potrebbe non essere così, poiché abbiamo solo un riferimento della funzione. La parte del codice che richiede un’azione di callback, attraverso tale riferimento (che ad esempio è stato approvato come argomento), eseguelo “fidarsi” in chi è successo l’argomento.
esempio di un cameriere, supponiamo ai clienti un ristorante internazionale , che rendono ordini a un cameriere, in diverse lingue. Abbiamo bisogno che questi ordini arrivino tradotti nel cuoco.
Il cameriere fa queste commissioni al cuoco, sempre in spagnolo.
--- - - \ |. - > --- > | ----- /
Ritorno al telecomando, supponiamo di fornire ai clienti un telecomando con un pulsante (un riferimento) e lo prestino quando vogliono ad esempio il caffè, Ma come eravamo quelli che gli hanno dato la tastiera, l’effetto potrebbe essere qualsiasi cosa, decidono solo quando lo prestino, ma è il ristorante che controlla quale azione è indietro. Questo è il mio compito, è un mezzo indiretto che hanno I clienti di “posizionare l’ordine al cuoco”, sparano un’azione attraverso il cameriere, si fidano che il cameriere saprà cosa fare (come sarebbe fidarsi del pulsante) quindi quando i clienti effettuano l’ordine (in qualsiasi lingua) In realtà, un’azione equivalente viene eseguita per effettuare l’ordine al cuoco (ma nell’unica lingua che capisci).
In questo esempio, un modo per farlo in Java.
- Un’interfaccia per definire il formato di callback (caratteristiche del telecomando, sposo multilingue)
- Classi che accettano come argomento Il callback (clienti che si fidano del ristorante)
- Sorriso di classe che implementa l’interfaccia (definisce cosa fare ogni volta callback)
- interfaccia
INTERFACCIA PUBBLICA BREEEROMULLILINGINATUALI {PUBBLICA VOID ADECAL Cafe (); // può essere molti altri metodi ...}
- un client di lingua spagnola
CLASSE PUBBLICA CLASSEESP {// Interfaccia che consente all'ordine di essere interpretato all'esterno di questa classe Ordine di Cameramullingue Private; Booleano privato affamato; // Esempio variabile // costruttore Classp pubblico (carameroomullingue p) {ordine = P; } Public Void processes () {Hunger = true; Se (fame) {system.out.println ("Buongiorno, un caffè per favore"); Ordine.perecareafe (); }}}
- Un client di lingua francese
Classe pubblica CLASSFRA {// Interfaccia che consente all'ordine di essere interpretato al di fuori di questo ordine di cameramullingue privato di questa classe; Booleano privato affamato; // Esempio variabile // costruttore Classe pubblica (carameroomullingue p) {ordine = P; } Public Void processes () {Hunger = true; Se (Hunger) {System.out.Println ("Bonjour, un caffè S'Il Vous Plaît?"); Ordine.perecareafe (); }}}
- Un client di lingua inglese
Classificazione della classe pubblica {// Interfaccia che consente all'ordine di essere interpretato al di fuori di questa classe Private Camaremultingue Order; Booleano privato affamato; // variabile di esempio // costruttore di formazione pubblica (Camareromultingue P) {ordine = P; } Public Void processes () {Hunger = true; Se (fame) {system.out.println ("Buongiorno, posso avere un caffè per favore?"); Ordine.perecareafe (); }}}
un cameriere
Classe pubblica Ristorante {Public Static Void Main (String ARGS) {Class Mozo implements Camaremultingual {Public Void Pymway Management () {System.out. System.out.println (""); }} // Si noti che l'interfaccia è pubblica perché devi conoscerlo // tutte le classi che lo contengono come proprietà // ma! Le classi che implementano possono essere private, interne, ecc. // ciascuna che può essere implementata e l'implementazione che desideri // ha dovuto rispettare i metodi minimi e i campi proposti dall'interfaccia. Mozointerprete = nuovo mozo (); // client, quando si entra nella barra si è assegnato un interprete intelligente (in questo caso lo stesso) CE clas = nuova classe (Mozointerprete); Classfra cf = nuovo classfra (mozointerprete); CLASSING ci = Nuova classificazione (Mozointerprete); //azione! La richiesta di CE.Process () è elaborata i client; cf.proces (); Ci.Process (); }}
output
Buono giorno, un caffè per favore il cameriere chiede allo chef: Una Java! Buongiorno, posso avere un caffè per favore?Il cameriere chiede al cuoco: una Java! Bonjour, un caffè S'Il Vous Plaît? Il cameriere chiede al cuoco: un java!
C’è un altro modo per farlo It? Sì, un’altra forma utilizza una classe astratta, questa classe implementa alcuni metodi, ma altri possono lasciarli “vuoti” in modo che alcune lezioni lo prolungano e possano implementarle, definirle funzionalità. È ancora un altro modo per effettuare il callback, dall’astratto La classe può chiamare i metodi ogni volta che ne hai bisogno (in base a una funzione prevista), e il contenuto di tali metodi (che cosa veramente) è definito all’esterno, nella classe che lo estende.