回調函數

回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作爲參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應 --摘自百度百科--

什麼是回調函數,上面的問題說的是不是很空洞,不是太形象,下面是知乎上的一位網友給的答案:

爲了有更直觀的體會,下面通過代碼來實現上述過程,

/**
 * @author LiosWong
 * @description 工具接口
 * @date 2018/6/23 上午1:03
 */
public interface Tools {
    /**
     * 打電話
     * @param msg
     * @return
     */
    String getCallMsg(String msg);
}

/**
 * @author LiosWong
 * @description 顧客類
 * @date 2018/6/23 上午1:01
 */
public class Customer implements Tools{
    @Override
    public String getCallMsg(String msg) {
        if(StringUtils.isNotEmpty(msg)){
            System.out.println(msg);
            return "已收到電話";
        }
        return "";
    }
    public static void main(String[] args) {
        Customer customer = new Customer();
        SalesPerson salesPerson = new SalesPerson();
        salesPerson.callCustomer("ok",customer);
    }
}

/**
 * @author LiosWong
 * @description 售貨員
 * @date 2018/6/23 上午1:01
 */
public class SalesPerson {
    public void callCustomer(String msg,Tools tools){
        if("ok".equals(msg)){
            String response = tools.getMsg("已經到貨啦,請前來購買~");
            System.out.println(response);
        }
    }
}

首先新建一個抽象工具類,裏面具體使用電話工具作爲通訊方法(回調函數),然後顧客要有電話,所以實現了這個接口;售貨員需要在有貨時通知顧客,所以需要有個通知顧客的方法callCustomer,入參數中有Tools接口的引用(登記回調函數),然後在該方法中調用Tools的方法,通知顧客已經有貨了(調用回調函數),顧客接受到電話通知(回調響應);然後在Customer類的main方法中, callCustomer方法的入參,傳入了Customer的實例.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章