java回调函数实例解析~~

回调函数就是在一个不确定实现方法中用interface或者它的抽象方法留个口子,留给具体调用者调用时补全,从而达到更灵活地编码的目的,也大大减少了子类的使用。


没例子没法讲,下面的例子模拟的是 客户端发送消息到服务器端,通过回调函数返回“状态值”(及服务器端是否收到消息)到客户端。


客户端与服务器端需要约定一个接口,我们先来定义这个接口。

package cn.hpy.com;
/**
 * 客户端和服务器约定的接口
 * @author hpy1012
 *
 */
public interface CSCallback {
/**
 * 
 * @param status //服务器后面可以返回给客户端的值
 */
public void process(String status);
}



客户端:

package cn.hpy.com;
/**
 * 
 * @author hpy1012
 *因为服务器端的getClientmsg持有该接口 通过实现该接口,
 */
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);
		//这个this 是指实现了的CScallback的当前client对象
		server.getClientmsg(this, msg);
		
	}
	
	@Override
	public void process(String status) {
		// TODO Auto-generated method stub
		System.out.println("客户端收到的status是"+status);
	}

	
}

服务器端:

package cn.hpy.com;

public class Server {

	/**
	 * 
	 * @param callback 
	 * @param msg 客户端传递给服务端的消息
	 */
	public void getClientmsg(CSCallback callback,String msg)
	{
		System.out.println("服务端收到的消息为: "+msg);
	  //模拟收到消息后服务器进行的耗时操作
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//status是返回给客户端的消息
		String status ="服务器端操作成功";
		System.out.println("服务器端的status是:"+status);
		callback.process(status);
	}
}



最后是测试类:

package cn.hpy.com;

public class MainTest {

			public static void main(String[] args) {
				
				Server server =new Server();
				Client  client = new Client(server);
				client.sendMsg("hello world");
			}
}


输出结果为:

客户端发送的消息为:hello world
服务端收到的消息为: hello world
服务器端的status是:服务器端操作成功
客户端收到的status是服务器端操作成功




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值