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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值