熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java Listener模式

2013-11-23 19:03:16  來源: Java核心技術 

  每種語言都有自己回調的方法java也不例外

  Java的回調是采用多態的方式來回調比如:

   interface MouseListener {

       //當click方法被調用的時候代表被鼠標點擊了

        void click();

   }

  上面是一個接口裡面只有一個方法先就通過一個例子展示java是如果施展多態的力量了

   public class Model {

  

       //初始化個監聽器

        private MouseListener[] listeners = new MouseListener[];

       //用於記錄當前listeners數組記錄到了哪裡

        int index = ;

  

       public void addListener(MouseListener listener) {

           //向這個model中注冊一個監聽器

            listeners[index++] = listener;

       }

  

       public void clickModel() {

           //調用注冊進來所有的listener的click方法

            for (int i = ; i < index; i++) {

               listeners[i]click();

           }

       }

       //測試model

        public static void main(String[] args) {

           Model model = new Model();

           //添加一個匿名內部類裡面實現了click方法

            modeladdListener(new MouseListener() {

  

               public void click() {

                   Systemoutprintln(我被點擊了);

               }

           });

           //再添加一個內部類

            modeladdListener(new MouseListener() {

  

               public void click() {

                   Systemoutprintln(我被點擊了);

               }

           });

  

           //下面給model一個點擊

            modelclickModel();

       }

   }

  

  

  

  以上是java的MVC框架下最精彩的一段代碼下面是model的工作例子:

   //測試model

        public static void main(String[] args) {

           Model model = new Model();

           //添加一個匿名內部類裡面實現了click方法

            modeladdListener(new MouseListener() {

  

               public void click() {

                   Systemoutprintln(我被點擊了);

               }

           });

           //再添加一個內部類

           modeladdListener(new MouseListener() {

  

               public void click() {

                   Systemoutprintln(我被點擊了);

               }

           });

  

           //下面給model一個點擊在實際的JDK源代碼中也是這樣子去調用Model中的響應方法的

           modelclickModel();

       }

  

  我們可以看到只點擊一次model卻可以輸出了我被點擊了的信息這也就是為什麼你可以向JButtonJComboBoxJListJTable等等裡面添加任意多的各種listener當然其中的奧秘仍需要各位讀者自己慢慢琢磨下面是源代碼:

   public class Model {

  

       //初始化個監聽器

       private MouseListener[] listeners = new MouseListener[];

       //用於記錄當前listeners數組記錄到了哪裡

       int index = ;

  

       public void addListener(MouseListener listener) {

           //向這個model中注冊一個監聽器

           listeners[index++] = listener;

       }

  

       public void clickModel() {

           //調用注冊進來所有的listener的click方法

           for (int i = ; i < index; i++) {

               listeners[i]click();

           }

       }

       //測試model

       public static void main(String[] args) {

           Model model = new Model();

           //添加一個匿名內部類裡面實現了click方法

           modeladdListener(new MouseListener() {

  

               public void click() {

                   Systemoutprintln(我被點擊了);

               }

           });

           //再添加一個內部類

           modeladdListener(new MouseListener() {

  

               public void click() {

                   Systemoutprintln(我被點擊了);

               }

           });

  

           //下面給model一個點擊

           modelclickModel();

       }

   }

  

   interface MouseListener {

       //當click方法被調用的時候代表被鼠標點擊了

       void click();

   }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26201.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.