软件模块之间老是存在着必定的接口,从调用方式上,能够把他们分为三类:同步调用、回调和异步调用。java
回调是一种特殊的调用,至于三种方式也有点不一样。异步
好比这里模拟个场景:客户端发送msg给服务端,服务端处理后(5秒),回调给客户端,告知处理成功。代码以下:ide
回调接口类:测试
/** * @author Jeff Lee * @since 2015-10-21 21:34:21 * 回调模式-回调接口类 */ public interface CSCallBack { public void process(String status); }
模拟客户端:this
/** * @author Jeff Lee * @since 2015-10-21 21:25:14 * 回调模式-模拟客户端类 */ 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.getClientMsg(Client.this,msg); } }).start(); System.out.println("客户端:异步发送成功"); } @Override public void process(String status) { System.out.println("客户端:服务端回调状态为:" + status); } }
模拟服务端:code
/** * @author Jeff Lee * @since 2015-10-21 21:24:15 * 回调模式-模拟服务端类 */ public class Server { public void getClientMsg(CSCallBack csCallBack , String msg) { System.out.println("服务端:服务端接收到客户端发送的消息为:" + msg); // 模拟服务端须要对数据处理 try { Thread.sleep(5 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("服务端:数据处理成功,返回成功状态 200"); String status = "200"; csCallBack.process(status); } }
测试类:server
/** * @author Jeff Lee * @since 2015-10-21 21:24:15 * 回调模式-测试类 */ public class CallBackTest { public static void main(String[] args) { Server server = new Server(); Client client = new Client(server); client.sendMsg("Server,Hello~"); } }