按钮状态的改变是底层才知道的。
仔细阅读上述代码部分,我们来看看java中是怎么通过接口进行回调的!
首先看看EventListener接口,不用多说那一定是定义了需要回调的方法。
其次是EventAdapter这个实现了EventListener,在这里没有太过苛刻的要求,读者也可以
不实现它。(其实这算一种设计模式,就不多说了)
接下来就是按钮了MyButton,这里面主要的是方法。
[java]
//对按钮添加监听
ublic void addListener(EventListener eventListener) {
if (flag == 0) {
eventListener.clicked();
} else
eventListener.pressed();
}
//对按钮添加监听
public void addListener(EventListener eventListener) {
if (flag == 0) {
eventListener.clicked();
} else
eventListener.pressed();
}
这里要结合测试代码来看一下:如下
[java]
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("按钮被按下了");
}
);
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并不能直接调用。