java设计——接口回调

一、什么是接口回调

网络上有很多关于接口回调技术的文章,但是看来看去,都是一些专业术语,这指针那指针的,初学者要看三四篇文章估计才能明白,今天我就用大白话给大家介绍什么是接口回调

如果你还不懂java接口,还是先去学习一下,回来再看我这篇文章.

回调:从字面意思上也应该很好理解,举一个栗子,我的老师交代给我一个任务,让我调查学生对哪个编程语言的兴趣最高,但是老师也不能一直等着我给她答案,毕竟老师也是很忙的,于是老师说:”你调查完后把文件发到我微信上”.
这里的”发到我微信上”就可以看作一个回调,当我调查完成之后,将结果发往老师微信.完成一次任务.
接下来就看代码如何实现上诉”回调”

二、定义回调接口

接口如何定义?,以及接口内的方法如何定义?
从上述的案例可以看出,回调指的是”将结果发往老师微信”,那好,我们就定义一个interface 叫做IResultCallback,里面有一个方法,叫做sendResult();但是光有一个方法貌似不够,既然是发,那么,发什么东西?当然是发学生对这个兴趣最高的语言了.那我们给sendResult方法加个参数sendResult(String language).Ok

public interface IResultCallback {
    void sendResult(String language);
}

三、定义处理者

回头在看上述案例,谁在调查?当然是我了,那就定义一个我,但是只有我还是不够的,你总的给我一个回调地址把吧让我知道我处理完后发给谁?
这里的IResultCallback就是上面定义的回调地址,
在Student的构造方法中,要求传入一个IResultCallback的实例,在java中,谁实现了它,就调用谁,那是不是要定义一个老师去实现这个接口,然后传给这个学生,当然

public class Student {
    /**
     * 回调接口
     */
    private IResultCallback mCallback;
    
    /**
     * 
     * @param mCallback 回调地址,当我处理完后,将结果发送到这个的接口实现类
     */
    public Student(IResultCallback mCallback) {
        super();
        this.mCallback = mCallback;
    }

    public void doTopLanguage() {
        try {
            Thread.sleep(2000);
            mCallback.sendResult("VB");//回调
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

四、定义老师

老师要做的事情就是交给学生任务,然后等待….等待…

public class Teacher implements IResultCallback{
    public Teacher() {
        /**
         * 这个老师一出生就要分配给学生任务
         */
        Student student =new Student(this);
        student.doTopLanguage();
    }

    @Override
    public void sendResult(String language) {
        System.out.println("老师:学生最喜欢的语言居然是: "+language +" !!!!");
        
    }

}

五、测试及结果

public class Main  {    
    public static void main(String[] args)  {
        new Teacher();
    }
}

//输出:
//老师:学生最喜欢的语言居然是: VB !!!!

嗯,是VB没错了

首先说明的是,在这个实例中,并没有说学生在做调查的时候,老师可以干其他的事情,因为没有在Student中开启一个新线程,怕初学者没学多线程,还不太明白.但是还是给出下面实例.

public class Teacher implements IResultCallback{
    public Teacher() {
        /**
         * 这个老师一出生就要分配给学生任务
         */
        Student student =new Student(this);
        student.doTopLanguage();
        System.out.println("老师:我去干其他事情了");
    }

    @Override
    public void sendResult(String language) {
        System.out.println("老师:学生最喜欢的语言居然是: "+language +" !!!!");
        
    }

}
public class Student {
    /**
     * 回调接口
     */
    private IResultCallback mCallback;
    
    /**
     * 
     * @param mCallback 回调地址,当我处理完后,将结果发送到这个的接口实现类
     */
    public Student(IResultCallback mCallback) {
        super();
        this.mCallback = mCallback;
    }

    public void doTopLanguage() {
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                    mCallback.sendResult("VB");//回调
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
        }).start();
    }
}
//输入:
//老师:我去干其他事情了
//老师:学生最喜欢的语言居然是: VB !!!!

    原文作者:听风逝夜h
    原文地址: https://www.jianshu.com/p/1b6a71d55700
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞