作为一个对java回调机制不了解的人来说,一听到回调机制这个名称感觉有点晕,下面先看一张图
开始模拟一个场景:
/*
* 场景:到吃中饭的时间了,但是张三兜里木有钱,然后我叫张三的好朋友,李二狗i去买饭,买完饭了给我
* 这时候就有一个过程 张三给李二狗子发命令----》李二狗子接受到命令,然后做了自己的一些操作之后---》再反馈给张三处理的结果
* 这就相当于一个闭环,起点是张三终点也是张三
*/
java 代码
packagetest.callback;
importorg.junit.Test;
/**
* 2017/12/21.
*
* 测试java的回调方法
*/
public classMine {
private intmyWallet=0;
/*
* 场景:到吃中饭的时间了,但是我兜里木有钱,然后我叫我的好朋友,李二狗子去买饭,买完饭了给我
* 这时候就有一个过程 我给李二狗子发命令----》李二狗子接受到命令,然后做了自己的一些操作之后---》再反馈给我处理的结果
* 这就相当于一个闭环,起点是我终点也是我
*/
@Test
public voidtest(){
intmyWallet=0;
System.out.println("到中午的吃饭时间了,要开始吃饭了");
//这时候实例化一个我,开始要吃饭了
Mine zhangSan=newMine();
//首先看看我兜里有木有钱
if(zhangSan.getMyWallet()==0){
System.out.println("哎呀今天发完工资就没钱了,就找李二狗子去借点,顺便让他把饭也给买了");
//一摸兜,哎呀今天发完工资就没钱了,就找李二狗子去借点,顺便让他把饭也给买了,真是够懒的,找别人借钱还要让别人给你买饭
//实例化一个李二狗子
OtherPeople lierDog=newOtherPeople();
//让李二狗开始买饭
lierDog.buyMeal(lierDog,zhangSan);
}
}
//就是李二狗要调用的回调方法,告诉我买饭的情况
public voideat(String words){
System.out.println("李二狗反馈说:"+words);
}
public intgetMyWallet() {
returnmyWallet;
}
public voidsetMyWallet(intmyWallet) {
this.myWallet= myWallet;
}
}
packagetest.callback;
/**
* Created by Administrator on 2017/12/21.
*/
public classOtherPeople {
private intmyWallet=10;
public voidbuyMeal(OtherPeople lierDog,Mine mine){
System.out.println("李二狗接到命令,要去买饭了");
//李二狗也要看看自己兜里有没有钱,要是有钱就能买,要是没钱就只好回复没有钱,你喝西北风
if(lierDog.getMyWallet()==0){
mine.eat("我兜里没钱,都要吃土了");
}else{
//TODO 处理买饭一系列事情之后,告诉我买饭的情况
/*
* 一个Mine 类可以实例化无数个我(张三,李四,王五),
* 怎么确定我就是这是让李二狗买饭的人,
* 不至于李二狗接收到张三去买饭命令,回复给李四饭已经买好了,
* 就是通过把类实例化之后的引用,当做参数传给李二狗,李二狗知道是张三这个人让去买饭的,
* 饭买好了就通知张三,而不是通知李四
*/
mine.eat("排了三个小时队,终于买到鸡了,晚上可以大吉大利一起吃鸡");
}
}
public intgetMyWallet(){
return this.myWallet;
}
}
当然这个回调机制耦合是很粗糙的,类与类之间耦合的很深,可以申明接口,去进行解耦。
注明:若文章有问题,欢迎指正。