在上篇博客中,我们介绍了两种访问XML的方式,一种是基于DOM文档的,另一种是基于SAX事件流的。在介绍面向事件访问方式的两种方法:SAX和STAX,提到了两个特别有意思的词:“推”模型和“拉”模型。
今天,我们就通过代码来看一下,它们是如何体现推和拉的。
【生活中的推拉模型】
在查找资料的时候,看到有人对这个推拉的比喻特别恰当。其实编程里面的一些词,都可以从现实生活中找到例子。例如这个推拉,就比如说发传单。发传单有两种方式:塞和取。前者是你经过的时候,发传单的人主动的扔给你,塞到你面前,而后者则向超市里的货架一样,摆在那里,等着你自己去取。
【编程中的推拉模型】
在我们的编程中的推拉,其实和现实生活中的推拉模型是一样的。它只不过是SAX方式解析XML的两种实现方法。其实,在我们的编程过程中也会遇到需要对某个对象进行监听,并在其发生变化的时候做出不同的反应情况。为实现此需求,我们有两种解决办法。
一、通过回调(CallBack)实现
定义一个函数,并且在其中编写变化处理语句,然后将其指针传递给被监听的对象,在被监听对象发生变化后,对其进行调用。这就是我们以事件为驱动的推模型(Event-driven programming)。就是对象发生改变的时候,用编写好的函数去处理这些参数。
二、通过轮询(Loop check)实现
不断去获取被监听对象的状态,在其改变后执行相应的语句。这就是拉模型,你获取被监听对象的状态,然后做出反应。
【SAX解析XML的推拉模型】
拉模型——STAX:获取XMLS