java回調函數


  今天在看java編程思想的時候看到回調函數這個問題,在這里總結一下自己對回調函數的理解加深一下印象。

  回調函數,簡單的從實際運用來給個定義啊。就是客戶端調用服務起執行一個函數,當服務器端執行完成之后反過來調用客戶端的函數。就是這樣一個簡單的過程。相信有過前端編程經驗的人都知道這個概念,比如ajax進行異步調用。

  今天我們舉一個例子來說明回調函數的使用方法,我們現在生活很方便,充值話費可以直接在支付寶或者是微信上面進行,我們可以簡單的使用回調函數的方式來模擬這個過程是如何實現的。我們簡答介紹一下這個過程,首先客戶端微信調用服務器端的接口進行充值操作,但是服務器端需要完成的內容就比較多了,比如:銀行完成轉賬,運營商進行充值等,所以這個過程就是一個異步的過程。我們完成微信充值之后會收到充值成功的界面,但是實際上充值並未成功。這里我們假設10086給我們發送的信息也是微信充值后台做的,代表着充值完成(實際上這是運營商做的)。

  思路如下: 首先客戶端需要調用服務器端進行充值的操作,這個過程中客戶端會提供充值的金額和充值的賬戶。

        服務器端接受到請求之后會進行充值,在這個過程完成之后  服務器端需要知道應該告訴誰充值過程完成了,也就是需要給誰回調信息。但是服務不光提供給指定的用戶,所以這里需要對客戶端進行抽象。

        服務器端完成這個操作之后回調客戶端的信息即可。

 代碼如下:代碼中有詳細的注釋 ,如有不當請大家指正。謝謝。

統一的接口:

/**
 * 完成充值后回調函數需要執行的內容
 * @author libo
 */
public interface ServerInterface {
    public void sendMessage(int amount,String account);
}

客戶端:

/**
 */
public class WechatClient implements ServerInterface{
    private int amount;
    private String account;
    @Override
    public void sendMessage(int amount, String account) {
        // TODO Auto-generated method stub
        System.out.println("客戶:"+account+"完成賬戶充值,金額:"+amount);
    }
    //調用服務器端進行充值
    public void forRecharge(){
        System.out.println("開始調用服務器端進行充值");
        new WechatServer().recharge(amount, account, this);
    }
    public WechatClient(int amount,String account) {
        this.amount = amount;
        this.account = account;
    }
}

服務器端:

/**
 * 服務器端需要完成客戶端的調用
 * 並且進行回調   注意這里回調就是指的短信提示
 * 並且服務器端需要提供制定的回調方法,這就意味着所有的客戶端都需要實現定義的接口
 * @author libo
 */
public class WechatServer {
    @SuppressWarnings("static-access")
    public void recharge(int amount,String account,ServerInterface wechatClient){
        System.out.println("服務器端開始進行充值操作");
        try {
            Thread.currentThread().sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("充值操作完成");
        //充值操作完成之后需要調用客戶端的回調函數通知客戶端
        wechatClient.sendMessage(amount, account);
    }
}

主函數:

public class Main {
    public static void main(String[] args) {
        int amount = 100;
        String account = "123123";
        WechatClient wechatClient = new WechatClient(amount, account);
        wechatClient.forRecharge();
    }
}

運行結果:

開始調用服務器端進行充值
服務器端開始進行充值操作
充值操作完成
客戶:123123完成賬戶充值,金額:100

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM