Olá, hoje quero compartilhar algo com vocês. Por exemplo, isso é muito usado em JavaScript. Vou falar sobre retornos de chamada. Você sabe quando e como usar isso? Você realmente entende seu uso no ambiente java? Quando me fiz essas perguntas, foi por isso que comecei a pesquisar isso. A ideia por trás disso é Inversão de Controle (PS: a explicação da Wikipedia é Inversão de Controle, abreviada como IoC), que é um princípio de design em programação orientada a objetos que pode ser usado para reduzir o acoplamento entre códigos de computador.) Este exemplo. descreve como funciona a estrutura, também baseada no conhecido "princípio de Hollywood - Não me ligue, nós ligaremos para você".
Use o padrão de retorno de chamada simples em Java para entendê-lo. Os exemplos específicos são os seguintes:
interface CallBack { void methodToCallBack();}class CallBackImpl implements CallBack { public void methodToCallBack() { System.out.println("Fui chamado de volta"); .methodToCallBack(); } public static void main(String[] args) { Chamador chamador = novo CallBack callBack = novo CallBackImpl();
Você pode querer me perguntar quando usar isso ou qual é a diferença entre chamada direta e mecanismo de retorno de chamada?
A resposta é: Bem, este exemplo apenas mostra como construir essa função de retorno de chamada no ambiente Java. Claro que não faz sentido usá-lo dessa forma. Vamos agora examiná-lo com mais detalhes.
A ideia dentro dele é a inversão de controle. Vamos usar um cronômetro como exemplo da vida real. Suponha que você saiba que existe um cronômetro especial que oferece suporte a retornos de chamada de hora em hora. Para ser mais preciso, significa que a cada hora o cronômetro chamará o método de chamada que você registrou.
Exemplos específicos:
Queremos atualizar o site a cada hora. Aqui está o modelo UML para o exemplo:
Interface de retorno de chamada:
Vamos primeiro definir a interface de retorno de chamada:
import java.util.ArrayList;import java.util.List;// Por exemplo: Vamos supor que esta interface seja oferecida pelo seu sistema operacional para ser implementadainterface TimeUpdaterCallBack { void updateTime(long time);}// esta é a sua implementação./ / por exemplo: Você deseja atualizar a hora do seu site a cada horaclass WebSiteTimeUpdaterCallBack implements TimeUpdaterCallBack { @Override public void updateTime(long time) { // imprime a hora atualizada em qualquer lugar do exemplo do seu site System.out.println(time }});
Em nosso exemplo, o timer do sistema suporta métodos de retorno de chamada:
// Este é o SystemTimer implementado pelo seu sistema operacional (SO) // Você não sabe como esse temporizador foi implementado. Este exemplo apenas // mostra como seria a aparência de um // retorno de chamada. você mesmo, se quiser.class SystemTimer { List<TimeUpdaterCallBack> callbacks = new ArrayList<TimeUpdaterCallBack>(); timerCallBack) { callbacks.add(timerCallBack }); // ... Esse SystemTimer pode ter mais lógica aqui não sabemos... // Em algum momento da implementação desse SystemTimer (você não sabe) / / este método será chamado e todo timerCallBack registrado // será chamado. Todo timerCallBack registrado pode ter uma implementação totalmente // diferente do método updateTime() e pode ser // usado de maneiras diferentes por clientes diferentes. oneHourHasBeenExprired() { for (TimeUpdaterCallBack timerCallBack: retornos de chamada) { timerCallBack.updateTime(System.currentTimeMillis());
Finalmente, aqui está o atualizador de horário do site em nosso exemplo simples:
// Este é o nosso cliente. Ele será usado em nosso exemplo de WebSite. Ele atualizará // o horário do site a cada hora. class WebSiteTimeUpdater { public static void main(String[] args) { SystemTimer SystemTimer = new TimeUpdaterCallBack; webSiteCallBackUpdater = novo WebSiteTimeUpdaterCallBack(); SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater }}
Texto original: http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java.html