[Java]回调机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shichimiyasatone/article/details/84985597

现有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()方法,实现递归。

猜你喜欢

转载自blog.csdn.net/shichimiyasatone/article/details/84985597