(day8) The Interface --- Data Callback

Asychronous invocation(异步调用)

软件模块之间存在调用的接口,从调用方式来看,有同步调用、回调、异步调用这三种方式:
同步调用是是一种阻塞式调用,调用方要等待被调用方执行完毕返回后才能获取调用的执行结果,是一种单向调用。
回调是一种双向调用,调用方在执行被调用方后,被调用方会调用被调用方的接口;
异步调用是一种类似消息或者事件的机制,接口在收到某个消息或发生某事件时,会主动通知客户方,通常使用回调来实现异步调用。
Java回调的必须要素:
1.雇主类必须有可以被观察者调用的方法A;
2.观察者必须持有可以调用A的对象的引用。
在实际工作中,我们通常将方法A以interface或者内部类的形式来实现,然后把包含有A的类的对象引用传递到观察者中。
Java中的线程的返回值是void,并且是一个异步执行流,所以我们没有直接的方法来获取线程执行后的结果,即不能直接知道线程何时结束,以及合适去获取线程执行任务后的结果。由于回调的存在,我们可以在线程中以回调的方式通知线程的调用者线程的结束时间,并可以将任务的结果通过回调回送到调用者中。

public class Http {
    // 2. Define a variable to receive who is going to listen the event of finishing network download
    private OnHttpFinishListener listener;
    public void getData(String url){
        // url is the download link
        System.out.println("Loading...");
        System.out.println("Finished");

        // 3. Mission complete,providing callback to downloaded data
        listener.Success("Here is your photo");
    }
        // 4.Provide a set method to save a listener
    public void setListener(OnHttpFinishListener listener){

        this.listener = listener;
    }
    // 1. Define a interface , return data uniformly
    public interface OnHttpFinishListener {
        void Success(String img);
        void Failure(String err);
    }
}
        // 4. Implement the interface
public class SplashView implements Http.OnHttpFinishListener{
    public SplashView(){
        // Begin to download the data
        Http http = new Http();
        // 6. Invoke current object to the function class
        http.setListener(this);
        // 7.Invoke the function class, realizing the specific functions
        http.getData("www.baidu.com");
    }
        // 5. Implement the methods in the interface
    @Override
    public void Success(String img) {
        System.out.println("展示图片 " + img);
    }

    @Override
    public void Failure(String err) {
        System.out.println("下载失败" + err);
    }
}
public class MyClass {
    public static void main(String[] args) {
       SplashView sv = new SplashView();
    }
}

![GBTK}OYDCHOMXFE`BI3XAD.png

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 2,248评论 0 14
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,762评论 0 4
  • 人与人是不一样的,脾气不同,性格不同,所经历的事情也不同,人与人之间是有差异的,但是很多人却没有看到这一点。 讲个...
    千言万语娟娟阅读 309评论 0 1
  • 周国平先生在《风中的纸屑》中这样说道“我天性不宜交际。在多数场合,我不是觉得对方乏味,就是害怕对方会觉得我...
    罗大桥阅读 147评论 0 1
  • 第145天 2019--04--05 感恩大自然恩赐的阳光雨露和空气等,无私滋养着宇宙万物。感恩父母的生养...
    傻妞幸福阅读 136评论 0 1