Java中的事件机制的参与者有3种角色:

1. event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在于listerner的方法之中
2. event source:具体的接受事件的实体,比如说,你点击一个button,那么button就是eventsource,这样你必须使button对某些事件进行响应,你就需要注册特定的listener,比如说MouseEvent之中的MouseClicked方法,这时它就必须有了add方法
3. event listener:具体的进行监听的事件类,当有其对应的event object产生的时候,它就调用相应的方法,进行处理。在windows程序设计里边这种响应使用callback机制来实现的

import org.junit.jupiter.api.Test;

public class MonitorTest {

    @Test
public void monitoringTest() throws Exception {
MonitorManager manager=new MonitorManager();
manager.addListener(new CarListener());
manager.addListener(new BicycleListener());
manager.addListener(new PersonListener());
manager.straight();
System.out.println("=======================");
manager.turnLeft();
}
}
import java.util.EventObject;

public class MonitorEvent extends EventObject {

    /**
* 1 直行绿灯
* 2 左拐绿灯
*/
private Integer heartRateValue; public MonitorEvent(Object source, Integer heartRateValue) {
super(source);
this.heartRateValue = heartRateValue;
} public Integer getHeartRateValue() {
return heartRateValue;
} public void setHeartRateValue(Integer heartRateValue) {
this.heartRateValue = heartRateValue;
}
}
import java.util.EventListener;

public interface MonitorListener extends EventListener {

    void monitorEvent(MonitorEvent event);

}
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator; public class MonitorManager { private Collection listeners; //存储所有注册进来的事件监听器对象;
public void addListener(MonitorListener listener) //把一个事件监听器对象注册进来;
{
if(this.listeners == null)
{
this.listeners = new HashSet();
}
this.listeners.add(listener);
} public void removeListener(MonitorListener listener) //移除一个已经注册的事件监听器对象;
{
if(this.listeners != null)
{
this.listeners.remove(listener);
}
} /**
* 直行
*/
protected void straight()
{
if(this.listeners != null)
{
MonitorEvent event = new MonitorEvent(this, 1);
notifyListeners(event);
}
} /**
* 左拐
*/
protected void turnLeft() //触发开门事件
{
if(this.listeners != null)
{
MonitorEvent event = new MonitorEvent(this, 2);
notifyListeners(event);
}
} private void notifyListeners(MonitorEvent event)
{
Iterator inter = this.listeners.iterator();
while(inter.hasNext())
{
MonitorListener listener = (MonitorListener)inter.next();
listener.monitorEvent(event);
}
}
}

===管理类

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator; public class MonitorManager { private Collection listeners; //存储所有注册进来的事件监听器对象;
public void addListener(MonitorListener listener) //把一个事件监听器对象注册进来;
{
if(this.listeners == null)
{
this.listeners = new HashSet();
}
this.listeners.add(listener);
} public void removeListener(MonitorListener listener) //移除一个已经注册的事件监听器对象;
{
if(this.listeners != null)
{
this.listeners.remove(listener);
}
} /**
* 直行
*/
protected void straight()
{
if(this.listeners != null)
{
MonitorEvent event = new MonitorEvent(this, 1);
notifyListeners(event);
}
} /**
* 左拐
*/
protected void turnLeft()
{
if(this.listeners != null)
{
MonitorEvent event = new MonitorEvent(this, 2);
notifyListeners(event);
}
} /**
* 通知每一个注册上来的监测,去执行
* @param event
*/
private void notifyListeners(MonitorEvent event)
{
Iterator inter = this.listeners.iterator();
while(inter.hasNext())
{
MonitorListener listener = (MonitorListener)inter.next();
listener.monitorEvent(event);
}
}
}

===三个具体的类

public class CarListener implements MonitorListener {

    public void monitorEvent(MonitorEvent event) {
if (event.getHeartRateValue() == 1) {
System.out.println("直行绿灯 汽车 可直行");
}
if (event.getHeartRateValue() == 2) {
System.out.println("左拐绿灯 汽车 可左拐");
}
}
}
public class BicycleListener implements MonitorListener {

    public void monitorEvent(MonitorEvent event) {
if (event.getHeartRateValue() == 1) {
System.out.println("直行绿灯 自行车 可直行");
}
if (event.getHeartRateValue() == 2) {
System.out.println("左拐绿灯 自行车 可左拐");
}
}
}
public class PersonListener implements MonitorListener {

    public void monitorEvent(MonitorEvent event) {
if (event.getHeartRateValue() == 1) {
System.out.println("直行绿灯 人 可直行");
}
if (event.getHeartRateValue() == 2) {
System.out.println("左拐绿灯 人 不可通行");
}
}
}

Java 事件链的更多相关文章

  1. JAVA防盗链在报表中的应用实例

    今天我们来聊聊Java防盗链,多说无用,直接上应用案例. 这里所用的工具是报表软件FineReport,搭配有决策系统(一个web前端展示系统,主要用于权限控制),可以采用java防盗链的方式来实现页 ...

  2. Java 事件机制

    java事件机制包括三个部分:事件.事件监听器.事件源. 1.事件.一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息,用于listener的相应的方法之中,作 ...

  3. java 事件监听 - 鼠标

    java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...

  4. java 事件监听 - 键盘

    java 事件监听 - 键盘 //事件监听 //键盘事件监听,写了一个小案例,按上下左右,改变圆形的位置,圆形可以移动 import java.awt.*; import javax.swing.*; ...

  5. java 事件监听 - 控件

    java 事件监听 //事件监听 //事件监听,写了一个小案例,点击按钮改变面板的颜色. import java.awt.*; import javax.swing.*; import java.aw ...

  6. JavaScript编程:java事件模型

    3.java事件模型: 传统事件处理程序指派方法:          1.var odiv=document.getElementById("div1");             ...

  7. JAVA事件监听机制学习

    //事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...

  8. java事件监听机制

    1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...

  9. java责任链模式及项目实际运用

    1.前言 上次我们认识了java责任链模式的设计,那么接下来将给大家展示责任链模式项目中的实际运用.如何快速搭建责任链模式的项目中运用. 2.简单技术准备 我们要在项目中使用借助这样的几个知识的组合运 ...

  10. Java事件监听器的四种实现方式

    自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: import javax.swing.*; import java.awt.*; i ...

随机推荐

  1. DS必背合集

    Data Structure必背合集 一.链表.栈和队列 1.简述说明数据的存储结构: 答: (1)顺序存储:逻辑上相邻的两个元素的物理位置也相邻. 优点:能够随机存取. 缺点:插入删除需要移动大量的 ...

  2. DDD技术方案落地实践

    1. 引言 从接触领域驱动设计的初学阶段,到实现一个旧系统改造到DDD模型,再到按DDD规范落地的3个的项目.对于领域驱动模型设计研发,从开始的各种疑惑到吸收各种先进的理念,目前在技术实施这一块已经基 ...

  3. 巅峰对决:英伟达 V100、A100/800、H100/800 GPU 对比

    近期,不论是国外的 ChatGPT,还是国内诸多的大模型,让 AIGC 的市场一片爆火.而在 AIGC 的种种智能表现背后,均来自于堪称天文数字的算力支持.以 ChatGPT 为例,据微软高管透露,为 ...

  4. SNN_文献阅读_Recent Advances and New Frontiers in Spiking Neural Networks

    Recent Advances and New Frontiers in Spiking Neural Networks 基本要素:包括神经元模型.神经元中脉冲序列的编码方法.神经网络中每个基本层的拓 ...

  5. 2022.7.15 jiazhaopeng 讲课纪要

    前言 由于难度仍然过高,难度再次下调,这节课主要在水绿.这节课讲的是并查集,之所以是以绿题为主是因为上了绿之后的题有一大半都要结合别的东西,初中生不会,所以只能讲的简单一点. ORZ%%% jzp学长 ...

  6. 基于FFmpeg和Qt实现简易视频播放器

    VideoPlay001 记得一键三连哦 使用qt+ffmpeg开发简单的视频播放器,无声音 视频解码使用的是软解码即只用CPU进行QPainter绘制每一帧图像,CPU占用过高 简单易学,适合小白入 ...

  7. Opencv学习笔记(1)

    1.安装环境 如何安装Python解释器和PyCharm,这里就不说明了, 参考文章链接:https://blog.csdn.net/weixin_72959097/article/details/1 ...

  8. Guava Preconditions类的各种用法

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. Guava Preconditions类 提供静态方法列表,用于检查是否使用有效参数值调用方法或构造函数.如果前提条件失败 ...

  9. 吉特日化MES系统&生产工艺控制参数对照表

    吉特日化MES生产工艺参数对照表 工艺编号 PROCE_BASE_TIMER 工艺名称 定时器 工艺说明 主要用于生产工艺步骤过程计时 参数编号 参数名称 参数描述 Prop_Timer_Enable ...

  10. MapStruct使用

    1.首先创建一个maven项目 2.导入相关的依赖 注意:lombok的版本 <?xml version="1.0" encoding="UTF-8"?& ...