观察者模式 源-监听器(Source/Listener)模式
事件监听器模式重要的三个概念:事件+事件监听器+事件源
$("#div").addEventListener("click",function(event){});
事件源:$("#div") 即id = div的html元素
事件:click事件对应的对象
事件监听器:function(event){ } 匿名函数
- 初始化事件源类,事件监听器所在的类(实现接口EventListener),事件类(继承EventObject类)。
- 对于每一个事件,都分为更为具体的事件(如点击事件,分为双击和单击。加载事件,分为开始加载,成功加载,加载异常,关闭页面等事件)。点击事件对应ClickEvent,其种类可以分为DoubleClick和SingleClick事件(通常使用ClickEvent类的类常量表示)。而ClickEvent事件则对应ClickEventListener事件监听器,更为具体的DoubleClick事件对应ClickEventListener事件的doubleClick方法,而SingleClick事件对应ClickEventListener事件的singleClick方法。
- 确认要触发的事件,实例化事件类,ClickEvent,并且赋值其成员变量,是赋值其为DoubleClick还是SingleClick。
- 当事件源触发click事件的时候,通过条件判断(if-else/switch-case),则会使用ClickEventListener事件监听器。接下来继续判断click事件的类型和种类,如果是DoubleClick事件,则调用ClickEventListener类的doubleClick方法。如果是SingleClick事件,则调用ClickEventListener类的singleClick方法。
定义一个事件源:Page页面。事件源至少有两个方法,一个是为自身添加事件监听器,一个是触发事件方法。当触发事件时,会根据传入的事件获取事件类型。从而确定应该实例化哪一个事件监听器类,并且调用事件监听器的哪一个方法可能
1、事件。一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息。
/** * 定义事件(状态)对象(该事件对象包装了事件源对象、作为参数传递给监听器、很薄的一层包装类): * 所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event 的**对象 */ public interface Event { public void show(); } //source—事件源对象—如在界面上发生的点击按钮事件中的按钮 //所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event // 的对象 不管是click事件还是double click事件都会发生在按钮之上 public class EventImplement extends EventObject implements Event { private EventSource source ; public EventImplement(EventSource source){ super(source); } @Override public void show() { System.out.println(); } }
事件监听器。实现java.util.EventListener接口,注册在事件源上,当事件源的属性或状态改变时,取得相应的监听器调用其内部的回调方法。
/** * EventListener 代表不同的行为 * 如果不同的行为只需要添加不同的 EventListener 即可 * 事件的监听者,当事件被触发,所有监听这个事件的监听者将被通知, 然后执行自己的Action 响应动作。 *listener得到事件并进行处理 */ public interface EventListener { void onEvent(Event e); } /** * 单击事件 */ public class EventListenerImplement1 implements EventListener { @Override public void onEvent(Event e) { System.out.println("single click event"); e.show();//回调 } } /** * 双击事件 */ public class EventListenerImplement2 implements EventListener { @Override public void onEvent(Event e) { System.out.println("double click event"); e.show(); } }
事件源。事件发生的地方,由于事件源的某项属性或状态发生了改变(比如BUTTON被单击、TEXTBOX的值发生改变等等)导致某项事件发生。换句话说就是生成了相应的事件对象。因为事件监听器要注册在事件源上,所以事件源类中应该要有盛装监听器的容器(List,Set等等)。
/** * 被监听者的事件集合,可能是方法,提供事件的注册加入和移除功能。 * source生产事件并分发 * eventSource应该实现EventListener的onEvent方法 */ public interface EventSource { public void registerListener(EventListener e); public void notifyEvent(); } public class EventSourceImplement implements EventSource { private Vector repository = new Vector();//监听自己的监听器队列 @Override public void registerListener(EventListener e) { repository.add(e); } //通知所有的监听器:直接调用对象里缓存repository的listener对象的onEvent方法, //这样就把Event对象分发出去了 @Override public void notifyEvent() { Enumeration enums = repository.elements(); while(enums.hasMoreElements()) { EventListener el = (EventListener)enums.nextElement(); el.onEvent(new EventImplement(this)); } } }
public class Test { public static void main(String[] args){ EventSource source = new EventSourceImplement(); EventListener click = new EventListenerImplement1(); EventListener doubleClick = new EventListenerImplement2(); source.registerListener(click); source.registerListener(doubleClick); source.notifyEvent(); } }
public class SafeListener { private final EventListener listener; private SafeListener() { listener = new EventListener() { public void onEvent(Event e) { e.show(); doSomething(e); } }; } void doSomething(Event e) { } public static SafeListener newInstance(EventSource source) { SafeListener safe = new SafeListener(); source.registerListener(safe.listener); return safe; } public static void main(String[] args){ EventSource source = new EventSourceImplement(); SafeListener safeListener = SafeListener.newInstance(source); source.notifyEvent(); } }
事件源:组件,例如Button
事件对象:event,例如MouseEvent类的对象 事件监听接口:EventListener,例如MouseListener
EventListener 接口是处理事件的主要方法。用户实现 EventListener 接口,并使用 AddEventListener 方法在 EventTarget 上注册其侦听器。用户还应该在使用完侦听器后从其 EventTarget 移除 EventListener。
MouseListener用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener。)
旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter(仅重写所需的方法)。
然后使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将 MouseEvent 传递给该方法。
相关推荐
AWT事件处理机制使用观察者模式来处理事件,事件源(Event Source)作为被观察者,事件监听器(EventListener)作为观察者,事件监听器在事件源状态发生变化时被通知,并执行相应的操作。 本文还将讨论三种使用观察...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java中,这种模式被广泛应用于事件处理,例如JavaBeans事件。 JavaBeans...
事件源(EventSource,即被观察者)在触发一个动作(Action)时,会产生一个事件(Event),这个事件会传递给所有监听器(Listener,即观察者)。监听器通过实现特定接口,注册到事件源,从而接收并处理事件。在OECP...
- **别名**:发布-订阅模式(Publish/Subscribe)、模型-视图模式(Model/View)、源-监听器模式(Source/Listener)或从属者模式(Dependents)。 - **类型**:属于行为型模式,关注的是对象间的交互方式。 #### 二、模式...
在这种模型中,对象(通常称为事件源)通过触发事件来通知其他对象(称为事件监听器或观察者)其状态的变化。在给定的标题和描述中提到的"ACTIVE事件发射器"是一个特定实现,它扩展了Java中的事件处理机制,允许注册...
Java中的监听器机制是基于观察者模式的设计模式之一,广泛应用于图形用户界面(GUI)应用程序中。 #### 二、监听器的基本组成部分 监听器通常包括以下几个部分: 1. **事件源(Event Source)**:触发事件的对象,如...
通过以上三个方面的介绍,我们可以看出Java事件机制的设计模式,它是基于观察者模式的一种具体实现,有效地解耦了事件源和事件处理逻辑。 --- #### 二、Java线程池使用说明 Java线程池是一种多线程处理形式,处理...
监听器模式是Java AWT和Swing图形用户界面(GUI)库中的核心概念,它遵循了设计模式中的观察者模式,使得组件能够动态响应用户的交互行为。 首先,我们来了解一下Java的事件处理模型。在Java GUI中,事件源(Event ...
观察者模式是一种行为设计模式,允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java中,事件处理主要用于图形用户界面(GUI)编程,例如Swing和JavaFX框架,但也可以应用于非...
所有的监听器接口都应继承自`java.util.EventListener`接口,尽管`EventListener`自身不定义任何方法,但它作为一个标记接口,确保所有监听器接口遵循统一的设计模式。监听器接口可以定义多个事件处理方法,每个方法...
Java使用了观察者模式(Observer Pattern)来实现这一机制,即事件源(被观察的对象)会发布事件,而事件监听器(Observer)则注册到事件源上,当事件发生时,监听器会接收到通知并执行相应的处理。 在给定的文件中...
在编程领域,事件驱动机制是一种常见的软件设计模式,它基于观察者模式,使得程序能够对特定事件的发生作出反应。在本场景中,我们讨论的是如何使用C++来实现这种机制,而不依赖任何特定的平台库。C++本身并不内置...
它基于Java的观察者模式,其中事件是被观察的对象,而事件监听器是注册来接收这些事件的对象。 2. **事件类与事件发布** 当一个组件完成特定操作后,可以创建并发布一个自定义的事件类,这个类通常继承自Spring的`...
这种设计模式被称为观察者模式,是Java中常用的一种多线程同步和异步通信方式。 在Java AWT和Swing库中,已经预定义了许多内置的事件类型,如鼠标事件、键盘事件、窗口事件等。但有时,这些预定义的事件并不能满足...
这通常涉及到观察者模式(Observer Pattern)的应用,它是一种行为设计模式,允许对象在其状态改变时通知其他对象。下面将详细阐述如何在Java中自定义实现事件。 首先,我们需要理解什么是事件。事件是对象状态改变...
在Java Swing和JavaFX中,通过监听器接口(Listener Interfaces)可以实现事件处理,例如`ActionListener`、`MouseListener`等。事件处理有助于实现组件之间的异步通信,提高程序的响应性和用户体验。 标签中提到的...
事件处理在Java中主要通过观察者模式实现,通常包含三个主要组成部分:事件源(Event Source)、事件对象(Event Object)和事件监听器(Event Listener)。事件源是触发事件的对象,例如按钮或文本框;事件对象包含...
Java事件模型主要包括三类角色:事件源(Event Source)、事件(Event)和事件监听器(Event Listener)。事件源是产生事件的对象,例如Swing中的JButton;事件是描述事件源状态变化的对象,如ActionEvent;事件监听...
这种设计模式被称为观察者模式,它提供了松散耦合和响应变化的能力。 2、使用示例 (1)定义事件类:首先,我们需要创建一个自定义的事件类,继承自ApplicationEvent。例如,我们创建一个UserRegisteredEvent,...