Thinking in Java之接口回调改版 (二)

2014-11-24 11:49:49 · 作者: · 浏览: 34
能,只是说按钮状态的监听是人为的,因为
按钮状态的改变是底层才知道的。

仔细阅读上述代码部分,我们来看看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并不能直接调用。