Java 回調(diào)實現(xiàn)

簡單說明

打個比方,就好比有兩個類A,B,他們分別有方法a(),a2()跟b()
A的方法a()調(diào)用了B的方法b(),然后b()中又調(diào)用回A的方法a2(),這么一來一回的,就是回調(diào)機制的過程了。

回調(diào).png

簡單例子

就比如小明要約小美去看電影,結(jié)果小美要先化妝,等小美化好妝后,再通知小明出發(fā)。

public class Mei {

    public void makeUp(){
        System.out.println("小美化妝");
        Ming ming = new Ming();
        // B 調(diào)用 A 的方法
        ming.watchMovie();
    }
}
public class Ming {

    public void invite(){
        System.out.println("小明邀請小美去看電影");
        Mei mei = new Mei();
        // A 調(diào)用 B 的方法
        mei.makeUp();
    }

    public void watchMovie(){
        System.out.println("兩人一起去看電影");
    }
}
測試結(jié)果

回調(diào)(接口實現(xiàn))

public interface Invitation {
    // 看電影
    public void watchMovie();
}
public class Mei {

    public void makeUp(Invitation invitation){
        System.out.println("小美化妝");
        // B 調(diào)用 A 的方法
        invitation.watchMovie();
    }
}
public class Ming implements Invitation{

    public void invite(){
        System.out.println("小明邀請小美去看電影");
        Mei mei = new Mei();
        // A 調(diào)用 B 的方法
        mei.makeUp(this);
    }

    @Override
    public void watchMovie(){
        System.out.println("兩人一起去看電影");
    }

    public static void main(String[] args) {
        Ming ming = new Ming();
        ming.invite();
    }
}

異步回調(diào)

前面的兩個例子中,都是小明在喊完小美之后,就一直在干等著小美化妝,這是屬于同步行為,但一般而言,小明正常都是在等待的過程中干點自己的事情,比如玩手機什么的,在等待的過程中做別的事情,這就屬于異步回調(diào)。

public interface Invitation {
    // 看電影
    public void watchMovie();
}
public class Mei {

    public void makeUp(Invitation invitation){
        System.out.println("小美化妝");
        // 要實現(xiàn)異步,則是需要多線程的幫忙
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    // 等待的期間小明在玩手機
                    play();
                    Thread.sleep(5000);
                    System.out.println("XX分鐘過后");
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
                // 化完妝了,告訴小明可以一起去看電影了
                invitation.watchMovie();
            }
        }).start();
    }
    
    public void play(){
        System.out.println("小明在玩手機");
    }
}
public class Ming implements Invitation{

    public void invite(){
        System.out.println("小明邀請小美去看電影");
        Mei mei = new Mei();
        // A 調(diào)用 B 的方法
        mei.makeUp(this);
    }

    @Override
    public void watchMovie(){
        System.out.println("兩人一起去看電影");
    }

    public static void main(String[] args) {
        Ming ming = new Ming();
        ming.invite();
    }
}
測試結(jié)果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Java回調(diào)實現(xiàn) 什么是回調(diào) 回調(diào)核心思想 案例代碼實現(xiàn) 后序 一、什么是回調(diào) 開發(fā)過程當中存在某種特殊的業(yè)務需求...
    黑馬程序員武漢校區(qū)閱讀 1,585評論 0 1
  • 專業(yè)考題類型管理運行工作負責人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,552評論 0 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,658評論 1 32
  • 重讀魯迅的《故鄉(xiāng)》,跟著魯迅的腳步在腦海里構(gòu)想一幅冬日江南水鄉(xiāng)的場景,底色是灰色。 人長大以后重回故鄉(xiāng),是故鄉(xiāng)但又...
    亦玫roseisrose閱讀 284評論 0 1

友情鏈接更多精彩內(nèi)容