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

 

  

  

posted @ 2017-07-02 22:34  奋斗中的屌丝  阅读(10204)  评论(1编辑  收藏  举报