JAVA - 回调机制
参考例子:android的Button OnClickListener接口、《第一行代码》中的回调例子
定义接口
public interface HttpCallbackListener{void onFinish(Stringresponse);void onError(Exceptione);}
调用接口
publicclassHttpUtil{publicstaticvoid sendHttpRequest( finalStringaddress,final HttpCallbackListener listener){newThread(newRunnable(){@Overridepublicvoid run(){HttpURLConnection connection = null;try{URLurl= newURL(address);connection =(HttpURLConnection)url.openConnection();connection.setRequestMethod("GET");connection.setConnectTimeout(8000);connection.setReadTimeout(8000);connection.setDoInput(true);connection.setDoOutput(true);InputStreamin= connection.getInputStream();BufferedReaderreader= newBufferedReader(new InputStreamReader(in));StringBuilderresponse= newStringBuilder();String line;while((line = reader.readLine())!= null){response.append(line);}if(listener != null){//回调onFinish()方法listener.onFinish(response.toString());}}catch(Exceptione){if(listener != null){//回调onError()方法listener.onError(e);}}finally{if(connection != null){connection.disconnect();}}}}).start();}}
实现接口,参数传入
HttpUtil.sendHttpRequest(address,newHttpCallbackListener(){@OverridepublicvoidonFinish(Stringresponse){//在这里根据返回内容执行具体的逻辑}@OverridepublicvoidonError(Exceptione){//在这里对异常情况进行处理}});
回调机制适用情景:
回调通常是在两个不同的线程间需要同步的情况下才出现的(见极客学院项目教程《智能聊天机器人》)
多在框架开发中使用,回调的接口由具体的应用者自行设计与实现。
在三层中,当业务层调用数据层时,是不需要把业务层自身传递到数据层的,并且这是一种上层调用下层的关系,比如我们在用框架的时候,一般直接调用框架提供 的API就可以了,但回调不同,当框架不能满足需求,我们想让框架来调用自己的类方法,怎么做呢?总不至于去修改框架吧。许多优秀的框架提几乎都供了相关 的接口,我们只需要实现相关接口,即可完成了注册,然后在合适的时候让框架来调用我们自己的类,还记不记得我们在使用Struts时,当我们编写 Action时,就需要继承Action类,然后实现execute()方法,在execute()方法中写咱们自己的业务逻辑代码,完成对用户请求的处 理。由此可以猜测,框架和容器中会提供大量的回调接口,以满足个性化的定制。
即:为了使我们写的函数接近完美,就把一部分功能外包给别人,让别人个性化定制,至于别人怎么实现不管,我唯一要做的就是定义好相关接口,这一设计允许了底层代码调用高层定义的子程序,增强程序灵活性,和反射有着异曲同工之妙。

浙公网安备 33010602011771号