最近在看java相关一些知识,发现很多关于事件驱动的东东,对事件驱动也不是很了解。通过网上浏览资料,了解了事件驱动的一些知识。
事件模型驱动的三要素
事件源:能够接收外部事件的源体。
侦听器:能够接收事件源通知的对象。
事件处理程序:用于处理事件的对象。
自己写了一个例子。讲的是一个小孩睡醒了(发生了睡醒的事件),接着父亲起来开灯,母亲给小孩喂奶。so easy。直接上代码。
小孩类(事件源)
public class Child { private String childName; public void weakUp(){ Event event = new WeakUpEvent(ChildEventName.WEAKUP, this); //发生了睡醒事件 EventDispatcher dispatcher = EventDispatcherImpl.getInstance(); dispatcher.dispatchEvent(event); //发布事件 } public void setChildName(String childName) { this.childName = childName; } public String getChildName() { return childName; } }
Event事件类
public class Event { private String eventName; //事件名称 private Object eventSource; //事件源 public Event(String _eventName,Object _eventSource){ this.eventName = _eventName; this.eventSource = _eventSource; } public Object getEventSource(){ return eventSource; } public void setEventSource(Object eventSource){ this.eventSource = eventSource; } public void setEventName(String eventName) { this.eventName = eventName; } public String getEventName() { return eventName; } }
WeakUpEvent具体的事件类
public class WeakUpEvent extends Event{ public WeakUpEvent(String eventName, Object eventSource) { super(eventName, eventSource); // TODO Auto-generated constructor stub } }
EventDispatcher事件管理中心
public interface EventDispatcher { public void addEventListener(String eventName, EventListener eventListener); public boolean hasEventListener(String eventName); public void removeEventListener(String eventName, EventListener eventListener); public void dispatchEvent(Event event); }
EventDispatcherImpl具体的事件管理中心
import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; public class EventDispatcherImpl implements EventDispatcher{ private static EventDispatcher instance = null; private EventDispatcherImpl(){ } private Map<String, Set<EventListener>> listenerQueue = new ConcurrentHashMap<String, Set<EventListener>>(); @Override public void addEventListener(String eventName, EventListener eventListener) { // TODO Auto-generated method stub Set<EventListener> listeners = listenerQueue.get(eventName); if(listeners == null){ listeners = new CopyOnWriteArraySet<EventListener>(); listenerQueue.put(eventName, listeners); } listeners.add(eventListener); } @Override public void dispatchEvent(Event event) { // TODO Auto-generated method stub Set<EventListener> listeners = (Set<EventListener>)this.listenerQueue.get(event.getEventName()); if (listeners != null && listeners.size() > 0) { for (EventListener listener : listeners) { listener.performed(event); } } } @Override public boolean hasEventListener(String eventName) { // TODO Auto-generated method stub Set<EventListener> listeners = this.listenerQueue.get(eventName); if(listeners != null && listeners.size() >0){ return true; } return false; } @Override public void removeEventListener(String eventName, EventListener eventListener) { // TODO Auto-generated method stub Set<EventListener> listeners = this.listenerQueue.get(eventName); if(listeners != null){ listeners.remove(eventListener); } } public synchronized static EventDispatcher getInstance(){ if(instance == null){ instance = new EventDispatcherImpl(); } return instance; } }
EventListener侦听器
public interface EventListener { public void performed(Event event); //事件处理方法 }
客户端代码
public class Client { public static void main(String[] args) { Client client = new Client(); client.registerListener(); Child child = new Child(); child.setChildName("小白"); child.weakUp(); } private void registerListener() {//注册侦听器 EventListener father = new EventListener() { @Override public void performed(Event event) { // TODO Auto-generated method stub Child child = (Child) event.getEventSource(); System.out.println(child.getChildName() + "发生了 " + event.getEventName() + " 的事件"); System.out.println("父亲赶紧开灯、、、"); } }; EventListener mother = new EventListener() { @Override public void performed(Event event) { // TODO Auto-generated method stub Child child = (Child) event.getEventSource(); System.out.println(child.getChildName() + "发生了 " + event.getEventName() + " 的事件"); System.out.println("母亲给" + child.getChildName() + "喂奶、、、"); } }; EventDispatcher dispatcher = EventDispatcherImpl.getInstance(); dispatcher.addEventListener(ChildEventName.WEAKUP, father); dispatcher.addEventListener(ChildEventName.WEAKUP, mother); } }
事件类型
public class ChildEventName { public static String WEAKUP = "睡醒了"; }
在代码中,只是简单的打印一下,取代用于处理事件的对象。OK,就这样啦!!!
发表评论
-
什么是Restful?
2012-03-03 00:11 1058REST 简介 REST 是英文 Represe ... -
java异常机制和异常处理原则
2012-02-07 11:09 991本文从Java异常最基本的概念、语法开始讲述了Java异常处理 ... -
利用 JSP 2 提供的 SimpleTagSupport 开发自定义标签
2012-02-02 14:49 685摘自:http://www.ibm.com/develop ... -
【转】java List 排序 Collections.sort
2012-01-13 13:07 782java List 排序 Collections.sor ... -
Java规则引擎工作原理及应用
2011-12-31 15:50 662摘 要 Java规则引擎是一种嵌入在Java程序中的组件,它的 ... -
棋盘覆盖(递归分治问题)
2011-10-07 21:35 2650在一个2^k * 2^k个方格组成的棋盘中,有一个方格与 ... -
java中list、set和map的区别
2011-09-20 14:43 753List的功能方法 实际上有两种Lis ... -
java访问修饰符
2011-09-19 18:03 760对类的访问有两种选择:public和”默认的(friendly ... -
java对象创建过程
2011-09-19 17:10 739这几天在看 Think in java 第四版 ...
相关推荐
传统嵌入式单片机开发中存在着软件开发性不足、开发结构复杂、功能复用性小、开发过程繁琐等问题,针对这些问题,提出利用事件驱动型层次式状态机的 QuantumPlatform 量子框架与嵌入式单片机相结合的解决方案,首先将...
单片机程序设计中运用事件驱动机制,单片机程序设计中运用事件驱动机制
Q-Controllers是一个事件驱动的应用代码框架,适用于低端单片机无法跑操作系统,但又要处理越来越复杂的代码构架的情况。 因为不依赖于操作系统,所以非常容易被移植到stm32之外的其他单片机上。即便不进行移植,...
EPC(事件驱动过程链)简介
Q-Controllers是一个事件驱动的应用代码框架,适用于低端单片机无法跑操作系统,但又要处理越来越复杂的代码构架的情况。 因为不依赖于操作系统,所以非常容易被移植到stm32之外的其他单片机上。即便不进行移植,...
事件驱动策略研究之十六:投资者关系活动事件驱动机会研究(27页).pdf
实现中,可以用时间代表银行活动的对象,用事件驱动来模拟这些活动,并以概率(随机数发生器)来描述预期的客户到达时间间隔和银行职员为一个顾客服务所需的时间。 在实验中,可改变参数(如银行窗口数、客户到达率...
技术: 1. spring事件驱动(ApplicationEventPublisher) 2. 策略模式处理事件 目的: 1. 通过event,代码逻辑异步处理 2. 通过策略模式,构建具体监听实现 3. 解耦 4. 容错(降低代码块错误风险)
事件驱动模型实例详解(Java篇)
Java 开发中事件驱动模型的实例详解,属于转的
C语言实现,用于嵌入式尤其单片机系统,小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,按键业务逻辑更清晰。c语言源代码;修订了原版的bug,更易用。...
实现的事件驱动机制,绑定对象与事件,通过成员方法响应事件,采用c++的方法实现,不依赖于任何平台
QP状态机 第2版 中文 嵌入式系统的事件驱动型编程技术第二版
事件驱动 应用架构 应用 事件驱动 应用架构 应用
论文研究-城市轨道交通车站客流仿真中的事件驱动模型.pdf, 利用多智能体(Multi-agent)仿真技术对轨道交通车站设计方案、客流组织方案进行评估是一种科学有效的方法.在对...
原创,引入事件驱动机制的程序框架,可以移植到所有单片机上,这是51移植版本。通过压力测试。
C#基于事件驱动的多串口多线程串口通讯软件架构设计[归纳].pdf
这里利用队列实现了一个完整的事件驱动编程过程,模拟了银行排队这一离散事件的发生。
一个事件驱动的测试框架
嵌入式系统的事件驱动型编程技术 第二版,qp状态机的详细介绍。它比前后台系统和RTOS实时性都要高,需要的资源更少。它是一个全新的构建代码架构的思想,会给你惊艳的思路,可以直接使用它的qp框架进行编程,有非...