[Java]回调机制

现有A、B两个类,两个类的实例a、b,A中实现a()方法,B中实现b()方法。

回调要求对象a在调用b对象的b()方法时,b()方法返回前需调用对象a的a()方法。

以管道通信传输为例,程序需要一边不停接收对端传来的数据并将接收到的数据进行处理,而又不影响主线程的进行。

 假定现有2个接口:接收者,处理者

interface 接收者{
    abstract void 不停接收(处理者 handler);
}
interface 处理者{
    abstract void 数据处理(数据 info);
}

假定有2个实现了接口的类:我会接收、我会处理

class 我会接收 implements 接收者{

    //实现接口中的抽象方法
    public void 不停接收(处理者 handler){
        //新建线程用于不停接收数据
        new Thread(){
            //一个实现了的接收方法 接收(),将管道中的数据拿出并返回
            //若无数据将阻塞在此,等待数据
            数据 info = 接收();
            //数据接收完毕,调用handler对象的数据处理()方法
            handler.数据处理(info);
        }.start()
    }
}
class 我会处理 implements 处理者{
    
    //实现接口中的抽象方法
    public void 处理数据(数据 info){
        //将数据处理简化为输出数据
        System.out.println(info);
    }
    
    public void 开始处理(接收者 receiver){
        receiver.不停接收(this);
    }
}

在主线程中接收并处理数据:

public class Demo{
    public static void manin(String[] args){
        我会处理 handler = new 我会处理();
        我会接收 receiver = new 我会接收();
        handler.开始处理(receiver);
        //数据开始接收后,主程序继续循序执行代码
        System.out.println("回调机制正在进行...");
    }
}

上述代码中:

“我会接收”类为A类,handler为该类(我会接收)的一个实例看做a;

“我会处理”类为B类,receiver为该类的一个实例看做b;

“数据处理”看做A类中的a()方法;

“不停接收”看做B类中的b()方法。

对象a调用对象b的b()方法,b()方法循环调用a对象的a()方法,实现递归。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值