Skip to content

Instantly share code, notes, and snippets.

@leopic
Created October 18, 2014 20:12
Show Gist options
  • Save leopic/43b289700e7ac27cebd9 to your computer and use it in GitHub Desktop.
Save leopic/43b289700e7ac27cebd9 to your computer and use it in GitHub Desktop.
poor man's callback
// Abstrae el "patron" de un callback, quien quiera ser un callback lo implementa
interface Callback {
public void go();
}
// Implementacion concreta de un callback
class MyCallback implements Callback {
@Override
public void go() {
System.out.println("Listo!");
}
}
class Temporizador implements Runnable {
private int minutos;
private int segundos;
// Tiene un callback, no sabe cual especifico
private Callback callback;
public Callback getCallback() {
return callback;
}
public void setCallback(Callback callback) {
this.callback = callback;
}
public Temporizador(int pMinutos, int pSegundos) {
minutos = pMinutos;
segundos = pSegundos;
}
@Override
public void run() {
while (minutos >= 0 && segundos > 0) {
segundos--;
System.out.println(minutos + ":" + segundos);
if (segundos == 0 && minutos > 0) {
minutos--;
segundos = 60;
}
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
System.out.println("Se interrumpio esta maire " + ie);
}
if (minutos == 0 && segundos == 0) {
// Llama al callback, polimorfism yo!
callback.go();
}
}
}
}
public class Main {
public static void main(String[] args) {
Temporizador tmp = new Temporizador(0, 3);
MyCallback myCb = new MyCallback(); // nueva instancia del callback
tmp.setCallback(myCb); // cuando ESTE temporizador termine, ejecute ESTE callback
Thread a = new Thread(tmp);
a.start();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment