JAVA事件驱动模式

线程a是作为事件源,那么线程a这个类就必须提供一个可以增加监听器的方法,就像GUI编程中的addActionListener这个样的方法。线程a这个类里面是有一个专门存放监听器的一个容器,例如是list。然后你 增加监听器的方法就是把监听器放进这个容器里面。你用一个监听器去监听一个事件的发生,就可以在线程a这个类中,写一个产生事件的一段代码,然后每当产生一个事件之后,去遍历list,去调用监听器的对于这个事件的处理方法,这样子就可以了。这应该就是java中的事件模式。
这其中的逻辑就是First做了一步后,触发事件,通过接口MyListener向事件处理单元Control传播,Control随即调用Second继续。
import java.awt.event.*;
import java.util.*;
interface MyListener 
{
void begin(First first);
}
class Control implements MyListener
{ First first; public void newGame(First first) { this.first = first; first.start(); }
@Override public void begin(First firstone)  { System.out.println("second go on"); }
}
class First 
{ private Set<MyListener>listeners = new HashSet<MyListener>();
public void action() { System.out.println("First begin"); } private class FirstThread implements Runnable {
public void run()  { while (true) { action(); for (MyListener sl : listeners) { sl.begin(First.this); } try { Thread.sleep(1000); catch (InterruptedException e)  { e.printStackTrace(); }
} } } public void start() { new Thread(new FirstThread()).start(); } public void addMyListener(MyListener ml) { if (ml != null) { listeners.add(ml); } }
}
public class TestEvent
{ public static void main(String args[]) { First first = new First(); Control c = new Control(); first.addMyListener(c); c.newGame(first); }
}
运行结果

First begin
second go on
First begin
second go on
First begin
second go on
First begin
second go on

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值