转载自:http://www.cnblogs.com/steven0lisa/archive/2010/04/17/1714463.html
感觉有收获, 感谢。
Java Listener 模式
每种语言都有自己回调的方法,java也不例外.
Java的回调是采用多态的方式来回调.比如:
1
interface
MouseListener {
2
//
当click方法被调用的时候代表被鼠标点击了.
3
void
click();
4
}
上面是一个接口,里面只有一个方法.先就通过一个例子展示java是如果施展多态的力量了.
1
public
class
Model {
2
3
//
初始化50个监听器
4
private
MouseListener[] listeners
=
new
MouseListener[
50
];
5
//
用于记录当前listeners数组记录到了哪里
6
int
index
=
0
;
7
8
public
void
addListener(MouseListener listener) {
9
//
向这个model中注册一个监听器
10
listeners[index
++
]
=
listener;
11
}
12
13
public
void
clickModel() {
14
//
调用注册进来所有的listener的click方法
15
for
(
int
i
=
0
; i
<
index; i
++
) {
16
listeners[i].click();
17
}
18
}
19
//
测试model
20
public
static
void
main(String[] args) {
21
Model model
=
new
Model();
22
//
添加一个匿名内部类,里面实现了click方法.
23
model.addListener(
new
MouseListener() {
24
25
public
void
click() {
26
System.out.println(
"
我被点击了
"
);
27
}
28
});
29
//
再添加一个内部类.
30
model.addListener(
new
MouseListener() {
31
32
public
void
click() {
33
System.out.println(
"
我被点击了
"
);
34
}
35
});
36
37
//
下面给model一个点击
38
model.clickModel();
39
}
40
}
41
42
43
以上是java的MVC框架下最精彩的一段代码.下面是model的工作例子:
1
//
测试model
2
public
static
void
main(String[] args) {
3
Model model
=
new
Model();
4
//
添加一个匿名内部类,里面实现了click方法.
5
model.addListener(
new
MouseListener() {
6
7
public
void
click() {
8
System.out.println(
"
我被点击了
"
);
9
}
10
});
11
//
再添加一个内部类.
12
model.addListener(
new
MouseListener() {
13
14
public
void
click() {
15
System.out.println(
"
我被点击了
"
);
16
}
17
});
18
19
//
下面给model一个点击,在实际的JDK源代码中,也是这样子去调用Model中的响应方法的.
20
model.clickModel();
21
}
22
我们可以看到,只点击一次model,却可以输出了2次"我被点击了"的信息.这也就是为什么你可以向JButton,JComboBox,JList,JTable等等里面添加任意多的各种listener.当然其中的奥秘仍需要各位读者自己慢慢琢磨.下面是源代码:
1
public
class
Model {
2
3
//
初始化50个监听器
4
private
MouseListener[] listeners
=
new
MouseListener[
50
];
5
//
用于记录当前listeners数组记录到了哪里
6
int
index
=
0
;
7
8
public
void
addListener(MouseListener listener) {
9
//
向这个model中注册一个监听器
10
listeners[index
++
]
=
listener;
11
}
12
13
public
void
clickModel() {
14
//
调用注册进来所有的listener的click方法
15
for
(
int
i
=
0
; i
<
index; i
++
) {
16
listeners[i].click();
17
}
18
}
19
//
测试model
20
public
static
void
main(String[] args) {
21
Model model
=
new
Model();
22
//
添加一个匿名内部类,里面实现了click方法.
23
model.addListener(
new
MouseListener() {
24
25
public
void
click() {
26
System.out.println(
"
我被点击了
"
);
27
}
28
});
29
//
再添加一个内部类.
30
model.addListener(
new
MouseListener() {
31
32
public
void
click() {
33
System.out.println(
"
我被点击了
"
);
34
}
35
});
36
37
//
下面给model一个点击
38
model.clickModel();
39
}
40
}
41
42
interface
MouseListener {
43
//
当click方法被调用的时候代表被鼠标点击了.
44
void
click();
45
}
46
Java回调与MVC框架应用
本文详细介绍了Java中回调机制的实现方式,通过MVC框架实例展示了如何使用多态来注册并调用监听器。重点阐述了匿名内部类与接口MouseListener的应用,演示了点击事件触发多个监听器响应的效果。

1603

被折叠的 条评论
为什么被折叠?



