Java中回调机制的使用

1,场景:模拟教师给学生布置作业,学生完成后将结果回告教师
2,初始化学生类:

public class Student {

    /*
    回调实际上是调用方Teacher将自身的实例teacher(Teacher.this)传递给被调用方Student对应的方法
    doHomeWork(WcsCallBack wcsCallBack, String task)内。
     */
    public void doHomeWork(WcsCallBack wcsCallBack, String task) throws InterruptedException {

        System.out.println("接到老师的作业:"+task);
        System.out.println("学生正在做作业");
        Thread.sleep(1000);
        System.out.println("作业已经完成");
        String result="【Today's homeWorker is so easy】";

        wcsCallBack.complete("notify Teacher the result of Today's homeWorker"+result);

    }

}

3,设置回调方法。(此方法被Student中使用)

public interface WcsCallBack {

    public void complete(String result);
}

4,初始化Teacher类

public class Teacher implements WcsCallBack {

    private Student student;

    public Teacher(Student student) {
        this.student = student;
    }


    /*
    下发布置作业
     */
    public void commandMethod(String homeWorker ){
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("即将布置作业...");
                try {
                    /*
                    doHomeWork(WcsCallBack wcsCallBack, String task)。
                    Teacher类实现了WcsCallBack接口,所以可以作为WcsCallBack实例传入。
                    /*
                    回调实际上是调用方Teacher将自身的实例teacher(Teacher.this)传递给被调用方Student对应的方法
                    doHomeWork(WcsCallBack wcsCallBack, String task)内。
                     */

                    student.doHomeWork(Teacher.this,homeWorker);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }).start();

    }



    @Override
    public void complete(String result) {
        System.out.println("收到学生对于今天作业的反馈:"+result);
    }

5,写测试类:

public class TestClass {

    public static void main(String[] args){

        Student stu = new Student();
        Teacher teacher = new Teacher(stu);
        System.out.println("进入测试程序");
        String homeWorker="【万历十五年朗读第三章】";
        teacher.commandMethod(homeWorker);

    }
}

6,结果输出:

进入测试程序
即将布置作业...
接到老师的作业:【万历十五年朗读第三章】
学生正在做作业
作业已经完成
收到学生对于今天作业的反馈:notify Teacher the result of Today's homeWorker【Today's homeWorker is so easy】

你可能感兴趣的:(Java中回调机制的使用)