閱讀233 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

 

最後更新:2017-04-02 06:51:55

  上一篇:go RSA加密算法
  下一篇:go [usaco]單源最短路徑:3.3.5 Sweet Butter