java开发中的事件驱动模型实例详解

合集下载

JAVA开发中的事件驱动模型实例详解

JAVA开发中的事件驱动模型实例详解
每个事件响应时只涉及到对该事件感兴趣的侦听器。由于侦听器只要求实现 一个合适的接口,所以实际上,可以在任何希望的地方接收和处理事件。在 Java 中使用侦听器对象处理事件的方式,称为委托事件模型,这是因为对于诸如按钮 这种组件引起的事件响应,并不是由引起事件的对象本身处理,而是委托独立的 侦听器对象进行处理,刚才的 actionPerformed()其实就是一个委托处理方法。 现在让我们来看一下,JButton 是如何将用户的点击转化成方法处理的(如图 1-2)。
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变 过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯 (如.net 和 java),而可视化编程的学习又可以非常方便开发出各类人机对话界 面(HMI)。可视化编程或许是一个初学者开始对软件感兴趣的开始,也可能是一 个软件学习的里程碑点,因为我们可以使用各类软件集成开发环境(IDE)方便的 在现成的界面窗口上拖放各类组件(Component),这类组件包括我们常见的按钮 (Button),单选按钮(Radio Button),复选框等(Checkbox)。这样的拖放式开发 方式不但方便,而且窗口会立竿见影的显示在我们的面前,这对于一个软件初学 者而言或许是一件非常有成就感的事情。
原文出处:中软卓越
现在我们来看一个生活中的示例,如果有一天你走在路上一不小心被天上掉 下来的花瓶砸到了,并且晕死了过去。那么整个过程其实就是一个事件处理流程, 而且我们可以非常方便的分析出刚才所提到的事件驱动模型中的三大要素。
1.被砸晕的这个人其实就是事件源,因为他是能够接受到外部的事件的源体。
2.侦听器就是这个人的大脑神经,因为它会感知到疼痛。
图 1-2
JButton 组件初始化代码片断:

如何在Java中实现高性能的事件驱动架构

如何在Java中实现高性能的事件驱动架构

如何在Java中实现高性能的事件驱动架构在当今的软件开发领域,构建高性能、可扩展且灵活的系统是至关重要的目标。

事件驱动架构(EventDriven Architecture,EDA)作为一种有效的设计模式,能够帮助我们实现这些目标,特别是在 Java 这样广泛应用的编程语言中。

首先,让我们来理解一下什么是事件驱动架构。

简单来说,事件驱动架构是一种基于事件的通信模式,其中系统的各个组件通过响应事件来进行交互和协作。

当某个事件发生时,相关的组件会被通知并执行相应的处理逻辑。

那么,为什么要在 Java 中采用事件驱动架构呢?其优势是显而易见的。

它能够提高系统的响应性,因为组件可以立即对事件做出反应,而无需等待同步调用的完成。

同时,它增强了系统的可扩展性,新的组件可以轻松地添加进来,只要它们能够处理特定的事件。

此外,事件驱动架构还促进了组件之间的解耦,使得系统更易于维护和调试。

要在 Java 中实现高性能的事件驱动架构,第一步是选择合适的事件模型。

常见的事件模型包括发布订阅模式和观察者模式。

发布订阅模式中,事件发布者将事件发布到一个中间件,订阅者向中间件注册以接收感兴趣的事件。

观察者模式则是一个对象(主题)维护一组观察者对象,当主题状态发生变化时,通知所有观察者。

在实现事件驱动架构时,事件的定义和封装是关键的一环。

事件应该被清晰地定义为具有特定属性和行为的类。

例如,一个“用户登录事件”可能包含用户的 ID、登录时间等属性。

同时,事件类应该提供必要的方法来获取和设置这些属性。

事件队列的设计和实现对于性能至关重要。

事件队列可以基于 Java 的阻塞队列(BlockingQueue)来实现,比如`ArrayBlockingQueue`或`LinkedBlockingQueue`。

阻塞队列能够自动处理多线程环境下的并发访问,确保事件的可靠存储和传递。

为了提高事件处理的效率,多线程的运用是必不可少的。

可以创建一个线程池来处理事件,每个线程从事件队列中获取事件并进行处理。

【Java】事件驱动模型和观察者模式

【Java】事件驱动模型和观察者模式

【Java】事件驱动模型和观察者模式你有⼀件事情,做这件事情的过程包含了许多职责单⼀的⼦过程。

这样的情况及其常见。

当这些⼦过程有如下特点时,我们应该考虑设计⼀种合适的框架,让框架来完成⼀些业务⽆关的事情,从⽽使得各个⼦过程的开发可以专注于⾃⼰的业务。

这些⼦过程有⼀定的执⾏次序;这些⼦过程之间需要较灵活的跳转;这些⼦过程也许需要围绕同⼀个上下⽂做操作;此时可以考虑使⽤事件驱动的⽅式来组织这些⼦过程,此时这些⼦过程可以被称之为事件处理器(或监听器),⽽将事件处理器组织起来的管理者,叫做事件中⼼。

最显⽽易见的实现⽅式,是观察者模式,或者监听者模式。

作为⼀个例⼦,考虑⼀个消息转发系统,它从上游接收消息,然后转发给正确的下游⽤户。

整个过程可以拆分为消息解析、消息存储、消息发送等步骤。

事件Event⾸先定义事件Event。

事件将作为⼀个基本元素,在处理器和事件中⼼之间建⽴其连线。

这⾥为了能够统⼀处理异常。

以及针对异常打出⽇志,除了业务相关的事件,还增加了异常事件和⽇志事件。

当然相应的也应该新增与之对应的事件处理器。

1package me.test.eventcenter;23/**4 * Created by chng on 2015/12/18.5*/6public class EventName {78private final String name;9public EventName(String name) { = name;11 }1213public static EventName msg_received = new EventName("msg_received");14public static EventName msg_resolved = new EventName("msg_resolved");15public static EventName msg_stored = new EventName("msg_stored");16public static EventName msg_pushed = new EventName("msg_pushed");17public static EventName exception_occured = new EventName("exception_occured");18public static EventName end_and_log = new EventName("end_and_log");1920public String getName() {21return name;22 }23 }事件处理器 EventHandler随后,定义⼀个简单的事件处理器的抽象类,其中包含⼀个单例的事件中⼼,每个处理器通过持有这个事件中⼼来执⾏注册⾃⼰(即订阅⼀个事件)和呼起下⼀个事件的操作。

Java事件模型详解(事件捕获3方法)AAA

Java事件模型详解(事件捕获3方法)AAA

Java事件模型详解(事件捕获3方法)AAA+java事件详解分类:JA V A技术2011-04-29 09:49130人阅读分析Java的事件处理模型及其原理,介绍了基于事件源识别的捕获3方法/回放所需要了解的关键技术并给出了两种实现方式。

1、Java事件介绍1.1什么是事件事件本身是表现另一对象状态变化的对象。

事件消息是对象间通信的基本方式。

事件在Java中事件是由系统自动生成自动传递到适当的事件处理程序。

1.2 Java事件处理的演变下面对java事件处理的发展做简要的概括。

在JDK1.0的版本采用用的事件模型,是一种包容模型,所有事件都封装在单一的类Event中,由单一的方法handleEvent来处理,这些定义都在Component类中。

为此,只有Component类的子类才能充当事件处理程序,事件处理传递到组件层次结构,如果目标组件不能完全处理事件,事件被传递到目标组件的容器。

JDK1.1增加了一些重要的新功能如,RMI、JNI、JDBC、JavaBean。

在事件模型上基本框架完全重写,并从Java1.0模型迁移到委托事件模型,在委托模型中事件源生成事件,然后事件处理委托给另一段代码。

从JDK1.2开始,引入了Swing包事件处理模型功能更强大,更加可定制GUI组件与他们相关联的支持类。

在后面的版本基本保持了整个事件模型,但加入了一些附加事件类和接口。

在1.3版本开始引入Rebot类,它能模拟鼠标和键盘事件,并用于自动化测试、自动运行演示、以及其他要求鼠标和键盘控制的应用程序。

我们把JDK1.0事件处理模型成为java 1.0事件模型,而从jdk1.1后的版本事件处理模型称为Java 2事件处理模型。

在Java1.0事件处理模型中事件处理是以如下方法执行的。

deliverEvent()用于决定事件的目标,目标是处理事件的组件或容器,此过程开始于GUI层的最外部而向内运作。

当按一个button时,如果检测到是该按钮激发的事件,该按钮会访问它的deliverEvent()方法,这一操作由系统完成。

Java事件处理机制(自定义事件)实例详解

Java事件处理机制(自定义事件)实例详解

Java事件处理机制(⾃定义事件)实例详解Java事件处理机制java中的事件机制的参与者有3种⾓⾊:1.event object:事件状态对象,⽤于listener的相应的⽅法之中,作为参数,⼀般存在与listerner的⽅法之中2.event source:具体的事件源,⽐如说,你点击⼀个button,那么button就是event source,要想使button对某些事件进⾏响应,你就需要注册特定的listener。

3.event listener:对每个明确的事件的发⽣,都相应地定义⼀个明确的Java⽅法。

这些⽅法都集中定义在事件监听者(EventListener)接⼝中,这个接⼝要继承 java.util.EventListener。

实现了事件监听者接⼝中⼀些或全部⽅法的类就是事件监听者。

伴随着事件的发⽣,相应的状态通常都封装在事件状态对象中,该对象必须继承⾃java.util.EventObject。

事件状态对象作为单参传递给应响应该事件的监听者⽅法中。

发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册⽅法,并接受对指定事件监听者接⼝实例的引⽤。

具体的对监听的事件类,当它监听到event object产⽣的时候,它就调⽤相应的⽅法,进⾏处理。

先看看jdk提供的event包:public interface EventListener:所有事件侦听器接⼝必须扩展的标记接⼝。

public class EventObject extends Object implements Serializable所有事件状态对象都将从其派⽣的根类。

所有 Event 在构造时都引⽤了对象 "source",在逻辑上认为该对象是最初发⽣有关Event 的对象。

(1)通过DoorEvent.java⽂件创建DoorEvent类,这个类继承EventObject。

java nio socketchannel 用例-概述说明以及解释

java nio socketchannel 用例-概述说明以及解释

java nio socketchannel 用例-概述说明以及解释1.引言1.1 概述在计算机网络通信中,传统的IO操作(即阻塞IO)往往会导致单线程无法高效处理多个网络连接。

为了解决这个问题,Java引入了NIO(New IO)机制,其中SocketChannel是NIO中最重要的一个组件之一。

Java NIO的背后思想是通过事件驱动模型实现非阻塞式IO操作。

相比传统的阻塞IO,NIO利用Selector选择器、Channel通道和Buffer 缓冲区的概念来实现高效的网络通信。

SocketChannel是NIO中提供网络连接的通道之一,它可以与一个TCP连接进行交互。

与传统的Socket不同,SocketChannel是非阻塞的,这意味着它可以在没有数据可读写时立即返回而不会阻塞线程,从而允许单线程同时处理多个连接。

SocketChannel通过Buffer进行数据读写,可以使用多种类型的Buffer来满足不同的需求,例如ByteBuffer、CharBuffer、IntBuffer等。

通过Buffer,SocketChannel可以实现高效的数据传输。

在本文中,我们将深入探讨SocketChannel的使用场景、优势和不足,以及它与NIO的关系。

通过了解SocketChannel的用例,读者将能够更好地理解和应用Java NIO的特性,并在网络编程中实现高效的数据传输和处理。

1.2文章结构1.2 文章结构本文将围绕Java NIO的SocketChannel展开详细讨论。

下面是本文的结构说明:1. 引言1.1 概述1.2 文章结构(即本节)1.3 目的2. 正文2.1 SocketChannel简介- SocketChannel的定义和作用- SocketChannel与传统IO的对比2.2 NIO简介- NIO的概念和特点- NIO中的关键组件和概念解析(Buffer、Channel、Selector等)- NIO与传统IO的对比3. 结论3.1 应用场景- SocketChannel的典型应用场景3.2 优势和不足- SocketChannel的优势- SocketChannel的不足与局限性通过以上结构,本文将全面介绍SocketChannel的基本概念和用法,并与传统IO进行对比,以便读者能够更好地理解NIO编程模型和SocketChannel的应用场景。

事件驱动模型

事件驱动模型

事件驱动模型代码块A代码块B传统的编程是如下线性模式的:开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结束每⼀个代码块李时完成各种各样事情的代码,但编程者知道代码块A,B,C,D的执⾏顺序,唯⼀能够改变这个流程的时数据。

输⼊不同的数据,根据条件语句判断,流程或许就为A--->C--->e--->j结束。

每⼀次程序运⾏顺序或许都不同,但它的控制流程是由输⼊数据和你编写的程序决定的,如果你知道这个程序当前的运⾏状态(包括输⼊数据和程序本⾝),那你就知道接下来甚⾄⼀直到结束它的运⾏流程。

对于事件驱动型程序模型,它的流程⼤致如下:开始--->初始化--->等待与上⾯传统编程模式不同,事件驱动程序在启动之后,就在那等待,等待上⾯呢?等待被事件触发。

传统编程下也有“等待”的时候,⽐如在代码块D中,你定义了⼀个input(),需要⽤户输⼊数据,但这与下⾯的等待不同,传统编程的“等待”,⽐如input(),你作为程序编写者是知道或者强制⽤户输⼊某个东西的,或许是数字,或许是⽂件名称,如果⽤户输⼊错误,你还需要提醒他,并请他重新输⼊,事件驱动的等待侧完全不知道,也不强制⽤户输⼊或者⼲什么。

只要某⼀事件发⽣,那程序就会做出相应的“反应”,这些事件包括:输⼊信息、⿏标、敲击键盘某个键还有系统内部定时器触发。

⼀、事件驱动模型服务器处理模型的程序时,有以下⼏种模型:(1)每收到⼀个请求,创建⼀个新的进程,来处理该请求;(2)每收到⼀个请求,创建⼀个新的线程,来处理该请求;(2)每收到⼀个请求,放⼊⼀个事件列表,让主动通过阻塞I/O⽅式来处理请求第三种就是携程、事件驱动的⽅式,⼀般普遍认为第(3)种⽅式是⼤多数⽹络服务器采⽤⽅式⼆、事件驱动模型⽬前⼤部分的UI编程都是事件驱动模型,如很多UI平台都会提供onClick()事件,这个事件就代表⿏标按下事件,事件驱动模型⼤体思路如下:1.有⼀个事件(消息)队列;2.⿏标按下时,往这个队列中增加⼀个点击事件(消息);3.有个循环,不断从队列取出事件,根据不同的事件,调⽤不同的函数,如onClick()、onKeyDown()等;4.事件(消息)⼀般都各⾃保存各⾃的处理函数指针,这样,每个消息都有独⽴的处理函数;事件驱动编程是⼀种编程范式,这⾥程序的执⾏流由外部事件来决定,它的特点是包含⼀个事件循环,当外部事件发⽣时使⽤回调机制来触发相应的处理,另外两种常见的编程范式式(单线程)同步⼀级多线程编程。

《JAVA》16事件驱动

《JAVA》16事件驱动

解题思路:
本例演示通常创建一个监听器类和对象的三种
常用方式:内部类方式、匿名类方式、窗口类方式。
程序中有三种按钮,单选按钮的监听器使用内部类 方式,复选按钮的监听器使用窗口本身,退出按键 的监听器使用匿名监听器对象。
LabelFont.java 演示
16.4 鼠标事件
java.awt.event.InputEvent +getWhen(): long +isAltDown(): boolean
鼠标移动事件 监听器接口
当按住鼠标键并进行移 动时调用 当不按住鼠标键并进行 移动时调用
+mouseMoved(e: MouseEvent): void
16.4 鼠标事件
例 16-4 使用鼠标在面板上移动字符串 查看代码: MoveMessageDemo.java 例16-5 使用鼠标写画 查看代码: ScribbleDemo.java
监听器需要对象需要具备的2个条件: 2. 监听器对象必须由事件源对象注册。
可以触发XEvent事件源对象的类包含
addXListener方法, 用以将监听器对象注册到事件 源对象。
用户 行为
触发 事件
调用注册方法注册
source: SourceClass +addXListener(XListener listener)
返回该事件发生的时间戳 返回该事件发生时是否按下了Alt键 返回该事件发生时是否按下了Meta键 返回该事件发生时是否按下了Shift键
+isControlDown(): boolean 返回该事件发生时是否按下了Ctrl键
+isMetaDown(): boolean
+isShiftDown(): boolean
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档