Thinking in Java之接口回调 (二)

2014-11-24 11:49:44 · 作者: · 浏览: 39
t的相同功能,只是说按钮状态的监听是人为的,因为

按钮状态的改变时底层才知道的。

仔细阅读上述代码部分,我们来看看java中是怎么通过接口进行回调的!

首先看看EventListener接口,不用多说那一定是定义了需要回调的方法。

其次是EventAdapter这个实现了EventListener,在这里没有太过苛刻的要求,读者也可以

不实现它。(其实这算一种设计模式,就不多说了)

接下来就是按钮了MyButton,这里面主要的是方法


[java]

//对按钮添加监听  
public void addListener(EventListener eventListener) {
if (flag == 0) {
eventListener.clicked();
} else
eventListener.pressed();
}

 


 


这里要结合测试类来看,如下


           button.addListener(new EventAdapter() { 
@Override
public void clicked() {
// TODO Auto-generated method stub
System.out.println("按钮被点击了");
}

@Override
public void pressed() {
// TODO Auto-generated method stub
System.out.println("按钮被按下了");
}
});




new 出来一个按钮并对其添加监听,形成一个匿名内部类对象传递给EventListener接口



由其回调相应的接口方法。该匿名内部类可以有选择的实现需要的方法,这也是为什么


不直接使用EventListener接口的原因。我们知道java中是动态绑定的,最后调用的方法,也


就是匿名内部类中重新实现的方法。


因此结果输出为:按钮被按下了


重新理解回调


通过创建匿名类,动态实现了接口的回调方法,侧重点在于接口,虽说使用的是


EventAdapter但是阅读器源码可以知道,我们并未对其做太多的事情,他只是一种"辅助“


手段!我们真正在意的是重新实现的方法,这个方法是提供个外部实现并由接口回调的


通俗的来讲就是:我提供给你一个接口的方法交给Coder实现,coder实现过后却由接口


进行回调。 Coder并不能就行直接调用。