java的事件机制之程序员的一天
2017-04-21 14:54
169 查看
1.介绍
java事件机制包括三个部分:事件、事件监听器、事件源。下面我们通过一个例子来学习,比如程序员的工作,可怜的程序员会受到各方的任务,一会项目经理让去会议室开会,一会测试人眼提出一个新bug要修复,一会呢项目组长又给分配新的开发任务,等等,忙的焦头烂额。。。
2.事件
一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息。package com.tl.skyLine.pattern.eventPattern; import java.util.EventObject; /** * 事件,也就是工作任务 * Created by tl on 17/4/21. */ public class Task extends EventObject { /** * Constructs a prototypical Event. * * @param source The object on which the Event initially occurred. * @throws IllegalArgumentException if source is null. */ public Task(Object source, String description) { super(source); this.description = description; } /** * 任务描述 */ private String description; public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
3.事件监听器
实现java.util.EventListener接口,注册在事件源上,当事件源的属性或状态改变时,取得相应的监听器调用其内部的回调方法。package com.tl.skyLine.pattern.eventPattern; import java.util.EventListener; /** * 事件监听器,实现java.util.EventListener接口。定义回调方法,将你想要做的事 * 放到这个方法下,因为事件源发生相应的事件时会调用这个方法。 * Created by tl on 17/4/21. */ public interface ActionEventListener extends EventListener { /** * 事件发生后的回调方法 */ public void handle(); }
4.事件源
事件发生的地方,由于事件源的某项属性或状态发生了改变(比如又给程序员分配新的任务了等等)导致某项事件发生。换句话说就是生成了相应的事件对象。因为事件监听器要注册在事件源上,所以事件源类中应该要有盛装监听器的容器(List,Set等等)。package com.tl.skyLine.pattern.eventPattern; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 程序员,也就是事件源 * Created by tl on 17/4/21. */ public class Developer { //监听器容器 private List<ActionEventListener> listeners = new ArrayList<>(); //程序员名字 private String name; public Developer(List<ActionEventListener> listeners, String name) { this.listeners = listeners; this.name = name; } // //添加监听任务 // public void addListener(ActionEventListener eventListener) { // listeners.add(eventListener); // } //开发人员说,我要开始处理你们分配的任务了 public void startWorking() { System.out.println("啦啦啦,我是搞java的程序员,不等睡醒就上班...(此处略去n句歌词)"); Iterator<ActionEventListener> iterator = listeners.iterator(); while (iterator.hasNext()) { ActionEventListener eventListener = iterator.next(); //监听到事件,调用事件回调函数 eventListener.handle(); } System.out.println("终于搞完了今天的任务,什么,又到晚上8点了..."); } }
这边用list放置事件,利用list的有序性,干活有先后顺序。
5.测试
package com.tl.skyLine.pattern.eventPattern; import java.util.ArrayList; import java.util.List; /** * Created by tl on 17/4/21. */ public class EventTest { public static void main(String[] args) { List<ActionEventListener> listeners = new ArrayList<>(); listeners.add(new ActionEventListener() { @Override public void handle() { Task task = new Task("项目经理老张", "马上到会议室开会,讨论一下需求!"); System.out.println(task.getSource() + "说:" + task.getDescription()); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } }); listeners.add(new ActionEventListener() { @Override public void handle() { Task task = new Task("测试人员陈小健", "项目有bug,修复一下!"); System.out.println(task.getSource() + "说:" + task.getDescription()); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }); listeners.add(new ActionEventListener() { @Override public void handle() { Task task = new Task("项目组长老李", "又有新的任务,两天之内完成!"); System.out.println(task.getSource() + "说:" + task.getDescription()); } }); Developer developer = new Developer(listeners, "邹小翔"); developer.startWorking(); } }
在java事件机制中,程序员邹保健就是一个事件源,项目经理、测试人员小陈、项目组长等等就是不同的事件监听对象(这边用匿名实现类),事件就是task,任务描述。
相关文章推荐
- 程序员手记:Java与C#的事件处理机制
- java中的事件机制
- java中的事件机制(续)
- JAVA事件处理机制
- Java事件处理机制- 事件监听器的四种实现方式
- 浅谈Java与C#的事件处理机制
- Java的事件处理机制
- Flex、Java、C#、JavaFX的事件处理机制的比较
- JAVA的事件机制理解
- Java中的DEM事件机制
- java的事件处理机制
- Java 学习笔记 (9) - Java 事件机制 内部匿名类的应用
- 用Java事件处理机制实现录制回放功能
- java事件机制
- java 事件处理机制
- 读Java事件处理机制
- Java事件机制理解及应用
- java .net MFC QT事件处理机制
- java事件处理机制—自定义事件
- 浅析Java与C#的事件处理机制