最近一直在看的相关东西,因为我们在iOS开发是,无论是还是中,经常会用到委托代理回调,以及或者说是闭包回调。接下来我们就来看看Java语言中是如何实现委托代理回调以及闭包回调的。当然这两个技术点虽然实现起来并不困难,但是,这回调在封装一些公用组件时还是特别有用的,所以今天,还是有必要把Java中的委托代理回调以及闭包回调来单独的拿出来聊一下。
本篇博客我们依然依托于实例,先聊聊委托代理回调的实现和使用场景,然后再聊一下使用来进行回调,其实就是我们常说的。闭包回调的实现方式其实就是匿名内部类的使用。既然本篇博客我们使用到了匿名内部类,我们就再聊一下的相关东西。
在iOS开发中,我们经常使用到委托代理回调,想等等,这些高级控件会依赖于委托回调来完成一些配置。当然在Java中委托代理回调也是非常有用的,接下来我们就来看一下中的委托代理回调。当然在中的委托代理回调是依托于“协议”的,迅速或者OC中的“协议”其实就是Java语言中的“接口”。所以在Java中的委托代理回调,依然要依托于“接口”来实现。
首先我们给出该部分实例的类图,然后我们根据下方的类图来设计实现我们的具体代码。下方就是本部分所设计演示的类图,当然,从类图中我们也能直观的看的到,该示例是比较简单的,一共也就是一个接口两个类。这个接口是代理类要实现的接口,其中包含了代理类要实现的方法。
从下方的类图中我们可以看的出,代理类一流的实现了代理接口,并实现了相关的代理方法。而依赖于接口,也就是说只要是实现了接口的类都可以作为SecondClass的代理。而一流的中含有类型的属性,并且极好又实现了接口,在一流的中,我们将对象的代理类指定为,稍后我们在具体实现时将会介绍到。
根据上述类图,我们很容易的就可以给出相应的代码实现。接下来我们就根据上述类图来给出具体的代码实现。
下方代码段就是的具体实现。当然该接口的实现比较简单,就一个方法。该方法的具体作用是用来相应参数回调的。下方我们会用到该方法。
包com.zeluli.callback.delegate; 公共接口CustomDelegate { 公共空间setValue(字符串值); }
CustomDelegate实现完毕后,接下来我们就来实现一下SecondClass的具体代码。下方代码段就是SecondClass的具体代码实现了。我们从具体实现中可以明确看出,SecondClass类中有个私有的委托属性,该属性是CustomDelegate类型的,所以SecondClass依赖于CustomDelegate类型。
在SecondClass的构造方法中,我们为代表指定了具体的对象,然后调用了开始()方法.begin()方法中做的事情也是比较简单的,就是使用了Java中自带的定时器,然后在特定时间的间隔中执行委托对象的setValue()方法,并且将当前的时间传给setValue()方法。
包com.zeluli.callback.delegate; 进口java.text.SimpleDateFormat; 进口java.util.Date; 进口java.util.Timer; 进口java.util.TimerTask; 公开课SecondClass { 私人CustomDelegate委托; 公共SecondClass (CustomDelegate委托){ this.delegate=委托; this.begin (); } 公共空间开始(){ TimerTask任务=new TimerTask () { @Override 公共空间run () { delegate.setValue (getNowDate ());//执行委托代理回调方法 } }; 长时间的推迟=0; 计时器计时=new计时器(); 计时器。scheduleAtFixedRate(任务,延迟,1000); } 私人字符串getNowDate () { 日期currentTime=new日期(); SimpleDateFormat格式化程序=new SimpleDateFormat (“yyyy-MM-dd HH: mm: ss”); 字符串dateString=formatter.format (currentTime); 返回dateString; } }
接下来我们来创建委托代理类,也就是我们的极好类。其中的代码也是比较简单的,一流的类实现了的相关方法,然后为secondClass对象指定了代理对象就是当前类的对象。具体代码如下所示。
包com.zeluli.callback.delegate; 公共类一流的实现CustomDelegate { 私人SecondClass SecondClass; 公共空间beginRunSecondDelegateMethod () { 如果这一点。secondClass==null) { 这一点。secondClass=new secondClass(这个); } }//secondClass回调要执行的方法 @Override 公共空间setValue(字符串值){ system . out。println(“第二个类回调过来的值:”+值); } }详谈Java编程之委托代理回调,内部类以及匿名内部类回调(闭包回调)