杨老师要粉刷墙壁,但是又不想请人工,所以叫上她的学生去帮她粉刷 叫学生拿着钥匙去刷墙,刷完之后告诉她结果
1,老师与学生之间的联系方式:callback接口
2,老师必须实现callback接口,这样,学生才能通过这个联系方式找到老师
3,老师要拿到学生的引用,这样就可以帮学生注册回调接口
4,学生必须知道联系方式,也就是必须传入callback接口作为入参,另外,还必须知道老师安排的任务是什么,所以任务也作为入参
来人哪~上代码!
嗻~~~~~
1,callback接口
public interface Callback { void process(String result); }
2,老师类
public class TeacherYang implements Callback { private StudentHe studentHe; public TeacherYang(StudentHe studentHe){ this.studentHe = studentHe; } public void shuaQiang(final String houseLocation){ System.out.println("杨老师发给何同学要刷的墙屋位置,位置是:" + houseLocation); new Thread(new Runnable() { @Override public void run() {
//此处注册回调函数,用callback函数的实现TeacherYang.this注册 studentHe.getHouseLocation(TeacherYang.this,houseLocation); } }).start(); System.out.println("何同学已经收到老师发送的位置,准备开刷!"); } @Override public void process(String result) { try{ Thread.sleep(5*1000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.println("杨老师在家喝茶...收到何同学发来的信息:" + result + ",杨老师满足的笑了,心想:又省了好些钱..."); } }
3,学生类
public class StudentHe { public void getHouseLocation(Callback callback,String houseLocation){ System.out.println("何同学已经收到老师发送的位置,位置是:" + houseLocation + "----->开始工作了!"); try{ Thread.sleep(10*1000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.println("刷了3个小时,累的跟条狗一样,何同学终于刷完了!"); String status = "'老师墙刷完了,可以住了!'"; callback.process(status); } }
4,测试类
public class CallBackTest { public static void main(String[] args) { StudentHe studentHe = new StudentHe(); TeacherYang teacherYang = new TeacherYang(studentHe); teacherYang.shuaQiang("湖南大学家属院"); } }
5,结果
杨老师发给何同学要刷的墙屋位置,位置是:湖南大学家属院 何同学已经收到老师发送的位置,位置是:湖南大学家属院----->开始工作了! 何同学已经收到老师发送的位置,准备开刷! 刷了3个小时,累的跟条狗一样,何同学终于刷完了! 杨老师在家喝茶...收到何同学发来的信息:'老师墙刷完了,可以住了!',杨老师满足的笑了,心想:又省了好些钱...