java异步回调模式栗子(2015-11-30 00:43:37)

关于回调模式的概念这里不做介绍,直接上代码

package com.dreyer.pattern.callback;
/**
 * @description 回调模式——回调接口类
 * @author Dreyer
 * @email [email protected]
 * @date 2015年11月29日 下午11:57:56
 * @version 1.0
 */
public interface CSCallBack {
    /**
     * 回调函数
     * 
     * @param status
     *            回调的状态码
     */
    public void process(String status);
}


package com.dreyer.pattern.callback;
/**
 * @description 回调模式——模拟服务端类
 * @author Dreyer
 * @email [email protected]
 * @date 2015年11月29日 下午11:59:44
 * @version 1.0
 */
public class Server {
    public void getCliengMsg(CSCallBack csCallBack, String msg) {
        System.out.println("服务端:接受到来自客户端的消息:" + msg);
        // 模拟服务端对数据的处理操作
        try {
            Thread.sleep(3 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 处理成功后,对回调接口发送回调信息
        String status = "200";
        System.out.println("服务端:数据处理成功,返回状态码:" + status);
        csCallBack.process(status);
    }
}


package com.dreyer.pattern.callback;
/**
 * @description 回调模式——模拟客户端类
 * @author Dreyer
 * @email [email protected]
 * @date 2015年11月29日 下午11:59:06
 * @version 1.0
 */
public class Client implements CSCallBack {
    private Server server;
    public Client(Server server) {
        this.server = server;
    }
    public void sendMsg(final String msg) {
        System.out.println("客户端:发送的消息为:" + msg);
        // 模拟异步发送消息
        new Thread(new Runnable() {
            @Override
            public void run() {
                server.getCliengMsg(Client.this, msg);
            }
        }).start();
        System.out.println("客户端:异步发送消息成功!");
    }
    @Override
    public void process(String status) {
        System.out.println("客户端:接收到来自服务端的回调状态码:" + status);
    }
}



测试类

package com.dreyer.pattern.callback;
/** 
 * @description 
 * @author Dreyer 
 * @email [email protected]
 * @date 2015年11月30日 上午12:12:26 
 * @version 1.0 
 */
public class CallBackTest {
    public static void main(String[] args) {
        Client client = new Client(new Server());
        client.sendMsg("Hello Word!");
        
    }

打印输出结果:

客户端:发送的消息为:Hello Word!

客户端:异步发送消息成功!

服务端:接受到来自客户端的消息:Hello Word!

服务端:数据处理成功,返回状态码:200

客户端:接收到来自服务端的回调状态码:200


packageInfo附录:

java异步回调机制的栗子

概念:回调是一种双向的调用模式,即:you call me,i will call you back

客户端给服务端发送一个请求(消息),服务端接收到这个请求(消息),做完相应的业务流程之后,再给客户端发一个消息告诉客户端这边的处理情况。

关键的点是:在给Server服务端发送消息的时候,将Client的引用作为参数传入,这样Server端处理完业务逻辑之后,调用Client的回调函数即可完成通知回调  

你可能感兴趣的:(java回调模式)