Java:案例理解-介面回撥
阿新 • • 發佈:2020-12-15
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();
}
}
執行結果:
嶽老闆囑咐司機去修車
嶽老闆去做自己的其他事情了。。。。。。。。。。。
(司機修車的過程。。。。。)
司機報告:老闆,車給你修好了,我先溜了溜了