回调的基本理解

一般理解回调大致都是这样说,假设A和B两个人,A让B去做谋一件事情,B做完了,再来通知A。我们一步一步来,从最基本的开始实现。

 1 class A {
 2     public void letBdoSth(B b) {
 3         System.out.println("让B做某些事情");
 4         b.doSth(this);
 5     }
 6 
 7     public void getCompleted() {
 8         System.out.println("得到B已经完成任务!");
 9     }
10 }
11 
12 class B {
13     public void doSth(A a) {
14         System.out.println("我是B,我正在处理A派给我的任务...");
15         a.getCompleted();//实现回调,getCompleted()方法即为回调方法
16     }
17 }

上述代码理解,既然A让B去做某件事情,那么,A是肯定是要B的对象引用的,才能让B去做,b.doSth();然后既然B做完了,要通知A,那么B此时按理说应该也要有A的对象引用,所以通过b.doSth(this),把当前对象this传递给b。这样B处理完,就通过A的对象引用告诉A即a.getCompleted();此时这个方法其实就是回调方法。由a调用,那么应该由A来声明。

第二阶段:当前的b只能处理当前的a派给她的方法,这样b就失去了通用性,所以,b应该是可以处理所有类似a的派遣方法故用接口来实现如下:

public interface CallBack {
    void getCompleted();
}

class A implements CallBack{
    public void letBdoSth(B b) {
        System.out.println("让B做某些事情");
        b.doSth(this);
    }

    @Override
    public void getCompleted() {
        System.out.println("得到B已经完成任务!");
    }
}

class B {
    public void doSth(CallBack callBack) {
        System.out.println("我是B,我正在处理A派给我的任务...");
        callBack.getCompleted();
    }
}

上面的CallBack即为回调接口,b做任务的过程可以加入线程和延迟来模拟,下面是测试类:

class TestCallBack {
    public static void main(String[] strings) {
        new A().letBdoSth(new B());
    }
}
//输出
//让B做某些事情
//我是B,我正在处理A派给我的任务...
//得到B已经完成任务!

只是帮助下新人理解,我也是个新人菜鸟,若是有什么错误,还请见谅和提出。

 

posted @ 2019-04-01 12:41  junlancer  阅读(614)  评论(0编辑  收藏  举报