关于回调

本文主要是自己对于回调的一些总结记录,如果有错误欢迎大家指正。

程序从调用方式上可以分为三类:同步调用、回调和异步调用(另开辟线程调用),本文主要讨论回调。

个人感觉,回调很像设计模式中的strategy策略模式,原因如下:

首先,定义一个回调接口:

public interface CallBack {
	public void exec();
}

定义一个Client类实现该接口:

public class Client implements CallBack{
	public void exec() {
		System.out.println("Client execute...");
	}
}

Server类持有Callback接口:

public class Server {
	private CallBack callback;
	public void setCallBack(CallBack callback){
		this.callback=callback;
	}
	public void post(){
		callback.exec();
	}
}

使用方式:

CallBack callback=new Client();
server.setCallBack(callback);
//服务器端运行...
System.out.println("Server is running...");
System.out.println("Server running finish,call Client...");
server.post();//call

其中,CallBack接口类似于strategy中定义的如何调用算法的接口,Client类似于strategy中的算法实现类,Server类似于strategy中的策略使用类。

也就是说,上面这个回调例子其实就是只有一个算法的strategy模式的实现,不知道这么说是否合理。

另一种回调方式是通过匿名内部类:

//通过匿名内部类的回调
Server server=new Server();
server.setCallBack(new CallBack(){//注册客户端
	public void exec(){
		System.out.println("No Name Client execute......");
	}
});
//服务器端运行...
System.out.println("Server is running...");
System.out.println("Server running finish,call Client...");
server.post();//call

其中,new CallBack(){...}即声明了一个实现CallBack接口的匿名内部类(以替代Client类实现),并且实现了exec方法。

在JDK类库中经常看到一些用于事件监听的Listener接口,大部分使用时都是这种匿名内部类方式(比如Swing和AWT类库中很多图形界面上的事件监听)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值