美文网首页
JAVA接口回调原理简单实现

JAVA接口回调原理简单实现

作者: 番茄tomato | 来源:发表于2019-08-15 17:32 被阅读0次

接口回调能实现的核心:接口对象可以被替换为实现这个接口的类的对象

//不会报错
InterfaceA a;
a=new A();

回调一直是一个JAVA中很重要的概念,应用场景:
A.class需要使用B.class的方法,然后A还需要在B的方法执行完毕后,作出对应反应,即在B的方法中还需要回调到将它new出来的A的方法。
为了方便理解,我们用到接口,做个简单的demo:
学生做完了作业,需要找家长检查,家长检查学生的作业是否准确完成,如果完成了就告诉学生可以玩游戏了,否则告诉学生继续做作业。
第一步:建立学生接口:InterfaceStudent (家长可以通过这个接口来找到学生并告诉他需要做的事情)

public interface InterfaceStudent {
    void playGame();//学生可以玩游戏了
    void doHomework();//学生还要写作业
}

第二步:建立学生类,实现这个接口 并且实现方法CheckHomework()来请家长帮忙检查作业

public class Student implements InterfaceStudent {
    public boolean isMyHomeworkFinishde;//判断作业是否写完
    private Parents mParents;//这个学生对应的家长
    Student(){//重写构造方法 建立学生对象时 也 建立其对应家长对象
        mParents=new Parents(this);
    }
    void setMyHomeworkFinishde(boolean isMyHomeworkFinishde){
        this.isMyHomeworkFinishde=isMyHomeworkFinishde;
    }
    void CheckHomework(){//请家长来检查作业
        mParents.check(this.isMyHomeworkFinishde);
    }
    @Override
    public void playGame() {
        System.out.println("可以打游戏了!");
    }
    @Override
    public void doHomework() {
        System.out.println("继续写作业!");
    }
}

建立Parents.class来实现检查作业的方法check(),并根据情况回调学生的玩游戏或者继续写作业方法

public class Parents {//家长 来判断学生该做什么
    InterfaceStudent mStudent;//先通过接口建立家长对应的学生对象

    Parents(Student mStudent){//绑定家长和学生
        this.mStudent=mStudent;
    }
//检查学生的作业 看看是否完成 并对学生作出相应指示
    public void check(boolean isMyHomeworkFinishde){
        if (isMyHomeworkFinishde){
            mStudent.playGame();
        }
        else{
            mStudent.doHomework();
        }
    };
}

最后就是Test类啦:

public class Test {
    public static void main(String[] args){
//A同学作业没有完成让家长检查
        Student studentA=new Student();
        studentA.setMyHomeworkFinishde(false);
        studentA.CheckHomework();
//B同学作业完成让家长检查
        Student studentB=new Student();
        studentB.setMyHomeworkFinishde(true);
        studentB.CheckHomework();
    }
}

运行结果就这样的啦:

继续写作业!
可以打游戏了!
Process finished with exit code 0

以上就是比较好理解的“接口回调”了
看到这里,有些同学可能要问了:这不坑爹吗!这个InterfaceStudent接口起个毛用呀!我直接在Parents里边声明Student对象 构造函数传入学生对象不就好了吗?如下:

//这种方式也是可行的 但不推荐 因为请家长检查作业的不一定是学生
//比如我家的dog也实现了InterfaceStudent接口 请家长检查作业呢 对吧
//android开发中 activity和fragment有时候会共用一个presenter
public class Parents {//家长 来判断学生该做什么
    private Student mStudent;
    Parents(Student mStudent){
        this.mStudent=mStudent;
    }}

暴躁老哥稍安勿躁,以上例子其实是个非常简单的示范,但至少还是是实现了回调这个机制呀。在以上做法中,加入接口反而让代码显得多余。但其实再大型项目中,这个接口的存在非常重要,因为项目中有多个家长和多个学生,我们需要这个接口来统一规定学生和父母能做的事情,方便管理。(瞎机吧扯,这样做的原因除了满足一些特殊需求外,主要还是为了解耦)

那么接下来我们可以稍微扩展一下:
如果我们在原本的基础上增加一个要求:学生在等待家长检查作业的时候,可以先去吃饭,那么是不是就需要开一个线程,这个线程中家长去检查作业,学生自己去做自己的事情,家长检查完毕再作出反馈。这种方式叫做异步回调。
很简单,只需要在学生请家长检查作业的方法中加入一个线程就可以了:

    void CheckHomework(){//请家长来检查作业
//异步请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                mParents.check(isMyHomeworkFinishde);
            }
        }).start();
        this.doOther();
    }
    
    public void doOther(){
        System.out.println("我先去扫地啦!");
    }

运行结果:

我先去扫地啦!
我先去扫地啦!
继续写作业!
可以打游戏了!

Process finished with exit code 0

总结一下,以上的接口回调其实不规范
1.应该在main中建立parents对象,然后通过student构造函数赋值,我直接在构造函数中new了
2.parents传入Student对象应该在check中添加Student形参,然后再赋值,或者单独给一个方法给student赋值
因为parent也会有单独的属性事情要设置等待
以上都是代码规范的问题,以后多多注意!
在android的开发中MVP架构大量使用了接口回调,并且封装的很好,要习惯这种解耦方式。

相关文章

  • JAVA接口回调原理简单实现

    接口回调能实现的核心:接口对象可以被替换为实现这个接口的类的对象 回调一直是一个JAVA中很重要的概念,应用场景:...

  • Kotlin使用接口回调

    1.Java中的接口回调实现(支持多方法回调) 声明回调接口,初始化接口 使用接口回调(无参数) 使用接口回调(带...

  • Dubbo Proxy 原理与实例

    Java代理 Java代理:通过反射和InvocationHandler回调接口实现 Proxy.newProxy...

  • Kotlin匿名内部类

    引言 匿名内部类常用作接口实现、回调等 java kotlin

  • java回调函数

    利用接口来实现回调,即在调用回调函数的类中实现接口,并实现接口中的方法即回调的方法,被调用类中存在接口的熟悉,并将...

  • Android Module之间数据传递

    方法一:使用接口回调 (1)在子module创建回调接口(参数可变) (2)在子module 实现类设置接口回调 ...

  • Java相关博客推荐阅读--Java回调机制

    Java回调机制 这篇文章循循渐进的介绍了什么是Java回调机制,以及在Java中的简单实现。通过形象生动的例子,...

  • 网络框架-Retrofit(三)

    简单实现Retrofit(替代Okhttp) 1.定义注解参数 2.实现回调接口Call和CallbackMyCa...

  • Kotlin学习2-接口回调

    java有接口回调,那么kotlin当然也有,而且比Java更简单,更高效!例如如下方法: result: (St...

  • 接口回调全面总结

    《Java2》接口回调 接口回调定义 接口和类一样,是Java中的一种数据类型,用接口声明的变量称之为接口变量 接...

网友评论

      本文标题:JAVA接口回调原理简单实现

      本文链接:https://www.haomeiwen.com/subject/henzjctx.html