Java Listener 模式
来源:互联网 发布:最新手机淘宝怎么开店 编辑:程序博客网 时间:2024/06/05 04:24
转载自: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
0 0
- Java Listener模式
- Java Listener 模式
- Java Listener 模式
- Java Listener 模式
- Java Listener 模式
- Java Listener 模式
- Java Listener 模式
- Java回调方式:Java Listener模式
- Java回调方式:Java Listener模式
- java listener 与 观察者模式入门
- [JAVA]Listener监听模式的学习
- listener模式
- Java设计模式:观察者模式以及Servlet中的Listener
- Java Listener
- Java利用listener实现回调,即观察者模式
- Listener监听器模式
- 观察者(Listener)模式
- object/listener模式
- android 显示通知关闭之后,Toast不显示的状态检测
- 哈希表
- 关于LGAME入门开篇
- boost多线程
- android_广播接受者_监听开机启动和IP拨号
- Java Listener 模式
- BOOST_FOREACH遍历
- Note of Vim
- Hadoop实战: Linux报 tmp 磁盘存储不足
- 分布式系统了的一些看法
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- android_广播者_监听短信
- android:configChanges属性
- ActiveMQ