zoukankan      html  css  js  c++  java
  • 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

      

      

  • 相关阅读:
    HTML表格的简单使用1
    守卫路由使用
    CSS高度塌陷问题解决方案
    CSS导航条nav简单样式
    Linux学习
    TYpeScript接口的使用
    javaScript中自定义sort中的比较函数,用于比较字符串长度,数值大小
    給eclipse添加字体,设置字体
    tomcat自动URLDecode解码问题(+号变空格)
    时间管理
  • 原文地址:https://www.cnblogs.com/liboBlog/p/7107440.html
Copyright © 2011-2022 走看看