详谈Java编程之委托代理回调,内部类以及匿名内部类回调(闭包回调)

  

最近一直在看的相关东西,因为我们在iOS开发是,无论是还是中,经常会用到委托代理回调,以及或者说是闭包回调。接下来我们就来看看Java语言中是如何实现委托代理回调以及闭包回调的。当然这两个技术点虽然实现起来并不困难,但是,这回调在封装一些公用组件时还是特别有用的,所以今天,还是有必要把Java中的委托代理回调以及闭包回调来单独的拿出来聊一下。

  

本篇博客我们依然依托于实例,先聊聊委托代理回调的实现和使用场景,然后再聊一下使用来进行回调,其实就是我们常说的。闭包回调的实现方式其实就是匿名内部类的使用。既然本篇博客我们使用到了匿名内部类,我们就再聊一下的相关东西。

  

  

在iOS开发中,我们经常使用到委托代理回调,想等等,这些高级控件会依赖于委托回调来完成一些配置。当然在Java中委托代理回调也是非常有用的,接下来我们就来看一下中的委托代理回调。当然在中的委托代理回调是依托于“协议”的,迅速或者OC中的“协议”其实就是Java语言中的“接口”。所以在Java中的委托代理回调,依然要依托于“接口”来实现。

  

  

首先我们给出该部分实例的类图,然后我们根据下方的类图来设计实现我们的具体代码。下方就是本部分所设计演示的类图,当然,从类图中我们也能直观的看的到,该示例是比较简单的,一共也就是一个接口两个类。这个接口是代理类要实现的接口,其中包含了代理类要实现的方法。

  

从下方的类图中我们可以看的出,代理类一流的实现了代理接口,并实现了相关的代理方法。而依赖于接口,也就是说只要是实现了接口的类都可以作为SecondClass的代理。而一流的中含有类型的属性,并且极好又实现了接口,在一流的中,我们将对象的代理类指定为,稍后我们在具体实现时将会介绍到。

  

详谈Java编程之委托代理回调,内部类以及匿名内部类回调(闭包回调)

  

  

根据上述类图,我们很容易的就可以给出相应的代码实现。接下来我们就根据上述类图来给出具体的代码实现。

  

  

下方代码段就是的具体实现。当然该接口的实现比较简单,就一个方法。该方法的具体作用是用来相应参数回调的。下方我们会用到该方法。

        包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编程之委托代理回调,内部类以及匿名内部类回调(闭包回调)