Notas de letra

Unha devolución de chamada é unha referencia a unha acción executable (non a acción en si) que normalmente é pasada como un argumento para outra función. É coma se nos pasamos un control remoto e indique “isto é para acender as luces”; Cando preme, pode que non sexa así, xa que só temos unha referencia da función. A festa de código que require a acción de devolución de devolución, a través da referencia (que por exemplo aprobouse como argumento), execútase “confiando” no que ocorreu o argumento.
Exemplo dun camareiro
Supoñamos que os clientes dun restaurante internacional , que fai ordes a un camareiro, en diferentes idiomas. Necesitamos que estas ordes sexan traducidas ao cociñeiro.
O camareiro converte estas comisións ao cociñeiro, sempre en español.

  --- - - \ |. - > --- > | ----- /  

Volvendo ao control remoto, supoña que lle daría aos clientes un control remoto cun botón (unha referencia) e presionan cando queiran, por exemplo, o café, Pero como eramos os que lle deron o teclado, o efecto podería ser calquera cousa, só deciden ao presionarlo, pero é o restaurante que controla a acción que está detrás. Esta é a tarefa, é un medio indirecto que teñen Os clientes “colocan a orde ao cociñeiro”, eles disparan unha acción a través do camareiro, eles confían en que o camareiro saberá que facer (como sería confiar no botón), polo tanto, cando os clientes poñen a orde (en calquera idioma) En realidade, unha acción equivalente execútase para facer a orde ao cociñeiro (pero na única lingua que entende).
Neste exemplo, unha forma de facelo en Java.

  • Unha interface para definir o formato de devolución de devolución (características do control remoto, noivo multilingüe)
  • Clases que aceptan como argumento A devolución de chamada (clientes que confían no restaurante)
  • Smile de clase que implementa a interface (define o que facer cada vez que a devolución de chamada)

  • interface
      creadería de interface pública {baleiro público adecal café (); // pode ser moitos máis métodos ...}  
  • un cliente de fala hispana

clase pública ClassesPP {// interface que permite interpretar a orde fóra desta clase Camaramultilingue privada; Privado booleano con fame; // exemplo variable // Classp público do constructor (carameromultilingue p) {orde = p; } Procesos de baleiro público () {hunger = true; Se (fame) {system.out.println (“Bo día, un café por favor”); Orde.pedircarfe (); }}}

  • Un cliente de fala francesa
      clase pública classfra {// interface que permite interpretar a orde fóra desta clase Camaramultilingue privada; Privado booleano con fame; // exemplo variable // clase pública de constructor (carameromultilingue p) {orde = p; } Procesos de baleiro público () {hunger = true; Se (fame) {system.out.println ("Bonjour, un s'il vous plaît café?"); Orde.pedircarfe (); }}}  
  • un cliente de fala inglesa
      Clasificación de clase pública {// interface que permite interpretar a orde fóra desta clase Camaremultilingue privada; Privado booleano con fame; // exemplo variable // Clasificación pública de constructor (Camareromultilingue p) {orde = p; } Procesos de baleiro público () {hunger = true; Se (fame) {system.out.println ("Bo día, podo ter un café por favor?"); Orde.pedircarfe (); }}}  
  • un camareiro

      clase pública Restaurante {Public Static Void principal (String Args) {Clase Mozo implementa camaremultilingüe {publicación de pagamentos públicos () {SYSTEM.OUT. Sistema.out.println (""); }} // Teña en conta que a interface é pública porque debes saber que // todas as clases que a conteñen como unha propiedade // pero! As clases que a implementan poden ser privadas, internas, etc. // cada unha que pode ser implementada e a implementación que quere // sempre que respecte os métodos e campos mínimos propostos pola interface. Será mozointerprete = novo mozo (); // Clientes, ao entrar na barra, atribúeselle un intérprete intelixente (neste caso a mesma) CE CLAS = Nova clase (Mozointerprete); Classfra cf = New classfra (Mozointerprete); CLASSING CI = Nova clasificación (Mozointerprete); // acción! A solicitude de CE.Process () os clientes son procesados; cf.proces (); Ci.process (); }}  

    saída

      bo día, un café por favor, o camareiro pide ao chef: A Java! Bo día, podo ter un café por favor?O camareiro pide ao cociñeiro: un java! Bonjour, un café s'il vous plaît? O camareiro pide ao cociñeiro: un java!  

    ¿Hai outra forma de facer? ? Si, outra forma está a usar unha clase abstracta, esta clase implementa algúns métodos, pero outros poden deixalos "baleiros" para que algunha clase esténdese e poida implementalos, definida a funcionalidade. Aínda é outra forma de facer devolución de chamadas, desde o resumo A clase pode chamar os métodos cada vez que os precisa (segundo algunha función esperada) e o contido destes métodos (o que realmente facer) está definido fóra, na clase que o estende.

    Deixa unha resposta

    O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *