notas de fonte

Um retorno de chamada é uma referência a uma ação executável (não a própria ação) que geralmente é passada como um argumento para outra função. É como se nos passarmos um controle remoto e indicaremos “isso é iluminar as luzes”; Quando você pressiona, pode não ser assim, já que só temos uma referência da função. A festa de código que exige ação de retorno de chamada, através dessa referência (que, por exemplo, foi aprovada como uma discussão), executa-a “confiante” em quem aconteceu o argumento.
Exemplo de um garçom, suponha que os clientes de um restaurante internacional , que faz pedidos para um garçom, em diferentes idiomas. Precisamos que essas encomendas cheguem traduzidas para o cozinheiro.
O garçom faz essas comissões ao cozinheiro, sempre em espanhol.

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

Voltando ao controle remoto, suponha que você dê aos clientes um controle remoto com um botão (uma referência) e eles o pressionarem quando quiserem, por exemplo, café, Mas como nós éramos os que lhe deu o teclado, o efeito poderia ser qualquer coisa, eles só decidem ao pressioná-lo, mas é o restaurante que controla o que a ação está por trás. Este é o dever de casa, é um meio indireto que eles têm Clientes para “colocar a ordem para o cozinheiro”, eles disparam uma ação através do garçom, eles confiam que o garçom saberá o que fazer (como seria confiar no botão), portanto, quando os clientes fazem o pedido (em qualquer idioma) Na verdade, uma ação equivalente é executada para fazer a ordem para o cozinheiro (mas na única língua que você entende).
Neste exemplo, uma maneira de fazê-lo em Java.

  • Uma interface para definir o formato de retorno (características do controle remoto, noivo multilíngue)
  • classes que aceitam como argumento o retorno de chamada (clientes que confiam no restaurante)
  • smile de classe que implementa a interface (define o que fazer a cada retorno de chamada)

  • interface
      interface pública BreaderomultiLiling {PÚBLICA VOID ADACAL CAFE (); // pode ser muito mais métodos ...}  
  • um cliente de língua espanhola
      interface de classe pública Classep {// que permite que a ordem seja interpretada fora desta ordem de cameramultilingues privada de classe; Booleano privado com fome; // Exemplo Variável // Construtor Public Classp (Carameromultilinge P) {Order = p; } Processos de void públicos () {fome = true; If (fome) {system.out.println ("Bom dia, um café por favor"); Ordem.pedircafe (); }}}  
  • um cliente francês
      classe de classe pública ClassFra {// Interface que permite que a ordem seja interpretada fora desta ordem de cameramulturação privada de classe; Booleano privado com fome; // Exemplo Variável // CLASSE PÚBLICA DO CONSTRUTOR (Carameromultilinge P) {Order = P; } Processos de void públicos () {fome = true; If (fome) {system.out.println ("Bonjour, um café plaît S'il Vous?"); Ordem.pedircafe (); }}}  
  • um cliente de língua inglesa
      Classe pública Classificação {// Interface que permite que a ordem seja interpretada fora desta ordem de camaremulturação privada de classe; Booleano privado com fome; // Exemplo Variável // Construtor Public Classing (camareromultilinge p) {Order = p; } Processos de void públicos () {fome = true; If (fome) {system.out.println ("Bom dia, posso tomar um café por favor?"); Ordem.pedircafe (); }}}  

    um garçom

      classe pública Restaurante {Public Static Void Main (String Args) {Class Aula Mozo Implementa Camaremultiento {Public Void Payment Management () {System.Out. System.out.println (""); }} // Observe que a interface é pública porque você deve saber que // todas as classes que contêm como uma propriedade // mas! As classes que implementam podem ser privadas, internas, etc. // cada uma que pode ser implementada e a implementação desejada // desde que respeite os métodos mínimos e os campos propostos pela interface. Will MoZointerprete = novo mozo (); // Clientes, ao entrar na barra, você recebe um intérprete inteligente (neste caso o mesmo) CE clas = nova classe (MoZointerprete); Classfra cf = nova classfra (MoZointerprete); Classificação Ci = Nova Classificação (MoZointerprete); //açao! O pedido de CE.Process () Clientes é processado; cf.proces (); Ci.process (); }}  

    Saída

      Bom dia, um café por favor, o garçom pede ao chef: Um java! Bom dia, posso tomar um café por favor?O garçom pede ao cozinheiro: um Java! Bonjour, um café S'il Vous Plaît? O garçom pede ao cozinheiro: um java!  

Existe outra maneira de fazer isto? Sim, outro formulário é usar uma classe abstrata, esta classe implementa alguns métodos, mas outros podem deixá-los “vazios” para que alguma classe estenda e possa implementá-las, defini-las funcionalidade. Ainda é outra maneira de fazer o retorno de chamada, desde o resumo A classe pode chamar os métodos toda vez que você precisar deles (de acordo com alguma função esperada), e o conteúdo desses métodos (o que realmente o) é definido fora, na classe que o estende.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *