1. 程式人生 > 其它 >Java:案例理解-介面回撥

Java:案例理解-介面回撥

技術標籤:java設計模式介面設計模式java

Java:案例理解-介面回撥

介面回撥的設計在實際應用中很多,其概念單從文字角度比較難以理解

那麼下面就一個簡單的實際應用案例理解

建議:

跟著動手敲一敲,畫呼叫關係圖,然後看註釋反覆理解

案例要求:

嶽老闆命令出去司機去修車,

期間嶽老闆忙自己的事,

司機修車完成後給嶽老闆報告;

程式碼實現:

回撥介面

/**
 * 回撥函式介面
 */
public interface CallBack {
    /**
     * 報告方法,
     * 這就是回撥方法
     * 當司機修完車會主動呼叫這個方法,給老闆報告
     * 為什麼是回撥?
     * 老闆繼承CallBack介面
     * 這個report()方法屬於老闆
     * 老闆命令司機做事,呼叫司機的修車方法,司機做完事會反過來呼叫老闆的方法進行報告,老闆反過來被呼叫的方法就是“回撥方法”
     * 這就是回撥
     * 你給別人發簡訊,別人收到簡訊通過你的手機號給你回覆,你的手機號就是回撥方法,收發需要通過手機號
     * @param str
     */
public void report(String str); }

老闆類


/**
 * 老闆類
 * 老闆只有繼承了回撥介面,才可以使用回撥的方法
 */
public class Boss implements CallBack {
    /**
     *  private Driver driver;這個理解為:
     * 你要呼叫司機的修車方法,你得有司機的物件,不然無法呼叫
     */
    private Driver driver;
    public Boss(Driver driver){
        this.driver=driver;
    }
/** * 修車方法 * 老闆通過此方法命令司機去修車 */ public void orderFix(){ System.out.println("嶽老闆囑咐司機去修車"); //新建一個執行緒,呼叫司機修車方法, // 現實理解是:不干擾老闆的執行緒,老闆要繼續做自己的事情 new Thread(()->driver.FixCar(this)).start(); } /** * 這是回撥方法,屬於老闆 * 司機修完車會呼叫這個方法 * @param str */
@Override public void report(String str) { System.out.println(str); } public void doOther(){ System.out.println("嶽老闆去做自己的其他事情了。。。。。。。。。。。"); } }

司機類

/**
 * 司機類
 */
public class Driver {
    /**
     * 司機修車方法
     * 回撥介面作為引數
     * 目的是為了呼叫回撥方法,給老闆報告
     * @param callBack
     */
    public void FixCar(CallBack callBack){
        try {
            //執行緒休眠,模擬修車過程
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //修車完成後,呼叫回撥方法,通知老闆車修好了
        callBack.report("司機報告:老闆,車給你修好了,我先溜了溜了");
    }
}

測試類

/**
 * 測試類
 */
public class TestDemo {


    public static void main(String[] args) {
        Driver driver=new Driver();
        Boss yue=new Boss(driver);
        //命令司機去修車,修好了給老闆報告
        yue.orderFix();
        //老闆忙自己的事情
        yue.doOther();
    }
}

執行結果:

嶽老闆囑咐司機去修車
嶽老闆去做自己的其他事情了。。。。。。。。。。。

(司機修車的過程。。。。。)

司機報告:老闆,車給你修好了,我先溜了溜了