Created
October 18, 2014 20:12
-
-
Save leopic/43b289700e7ac27cebd9 to your computer and use it in GitHub Desktop.
poor man's callback
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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