Java事件监听机制

这里写目录标题

先进行专栏介绍

本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记
进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。

再插一句

有一段时间断更了,是在更新数据结构与算法专栏,有兴趣的可以去看一看,比较不错

开始喽

事件监听机制

Java中的事件监听机制是一种用于处理用户交互事件的机制。它允许开发人员在特定事件发生时执行特定的代
	码逻辑。

分析

在Java中,事件监听机制是基于 观察者模式实现的。

观察者模式

观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生变化时,
所有依赖它的对象都会得到通知并自动更新。
观察者模式由以下几个角色组成:
1Subject(主题):主题是被观察的对象,它维护了一个观察者列表,并提供了用于添加、删除和通知观察者
	的方法。主题可以是一个接口或抽象类,具体的主题类实现了主题接口。
2、Observer(观察者):观察者是依赖于主题的对象,它定义了一个更新方法,当主题状态发生变化时,观察
	者会被通知并执行相应的更新操作。观察者可以是一个接口或抽象类,具体的观察者类实现了观察者接口。
3、ConcreteSubject(具体主题):具体主题是主题的具体实现类,它维护了一个状态,并在状态发生变化时
	通知观察者。具体主题类通常包含了观察者列表,并提供了添加、删除和通知观察者的方法。
4、ConcreteObserver(具体观察者):具体观察者是观察者的具体实现类,它实现了观察者接口中的更新方
	法。具体观察者类在收到通知后,根据具体的业务需求执行相应的更新操作。
观察者模式的工作流程如下:
1、主题对象维护观察者列表,并提供了添加、删除和通知观察者的方法。
2、观察者对象注册到主题对象上,成为主题对象的观察者。
3、当主题对象的状态发生变化时,它会遍历观察者列表,并调用每个观察者的更新方法。
4、每个观察者收到通知后,根据具体的业务需求执行相应的更新操作。
观察者模式的优点包括:
1、解耦:主题对象和观察者对象之间解耦,它们可以独立变化,互不影响。
2、可扩展性:可以动态地添加、删除观察者对象,使得系统具有良好的扩展性。
3、灵活性:观察者模式可以实现一对多的依赖关系,一个主题对象可以通知多个观察者对象。
观察者模式适用于以下场景:
当一个对象的改变需要同时改变其他对象的时候,可以使用观察者模式。
当一个抽象模型有两个方面,其中一个方面依赖于另一个方面时,可以使用观察者模式。
当一个对象必须通知其他对象,但又不希望与被通知的对象形成紧耦合关系时,可以使用观察者模式。
总结
观察者模式通过定义一对多的依赖关系,实现了对象之间的解耦和松耦合。它提供了一种灵活的方式来处理对
	象之间的通信和状态变化,使得系统具有更好的可扩展性和可维护性。

事件监听机制的工作流程如下:

定义事件源:事件源是触发事件的对象,它通常是一个类或接口。事件源需要提供注册和注销监听器的方法,
	并在适当的时候触发事件。
定义事件监听器接口:事件监听器接口定义了事件发生时要执行的方法。通常,事件监听器接口包含一个或多个
	事件处理方法。
实现事件监听器:根据定义的事件监听器接口,实现具体的事件监听器类。这些类负责处理事件发生时的逻辑
	操作。
注册事件监听器:在事件源上调用注册方法,将事件监听器对象注册到事件源上。这样,事件源就知道要通知哪
	些监听器。
触发事件:当事件源发生事件时,它会遍历已注册的监听器列表,并调用每个监听器的事件处理方法。这样,每
	个监听器都可以根据具体的业务需求执行相应的操作。
响应事件:每个监听器收到事件通知后,根据具体的业务需求执行相应的操作。这些操作可以包括更新界面、处
	理数据、发送通知等。

Java代码示例

java 复制代码
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class crj {
    public static void main(String[] args) {
        JFrame jf=new JFrame();

        jf.setTitle("事件监听机制");
        jf.setSize(400,300);
        jf.setDefaultCloseOperation(3);
        jf.setLocationRelativeTo(null);
        jf.setAlwaysOnTop(true);
        jf.setLayout(null);

        //确定按钮
        JButton jButton=new JButton("你点我啊");
        jButton.setBounds(0,0,100,100);
        jf.add(jButton);

        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("你点我啊");
            }
        });

        jf.setVisible(true);
    }
}
相关推荐
赖赖赖先生6 分钟前
fastadmin 框架 生成qr code 二维码图片,PHP 7.4版本
开发语言·php
字节流动29 分钟前
Android Java 版本的 MSAA OpenGL ES 多重采样
android·java·opengles
玉红7771 小时前
R语言的数据类型
开发语言·后端·golang
夜斗(dou)1 小时前
node.js文件压缩包解析,反馈解析进度,解析后的文件字节正常
开发语言·javascript·node.js
觅远1 小时前
python+PyMuPDF库:(一)创建pdf文件及内容读取和写入
开发语言·python·pdf
呜呼~225142 小时前
前后端数据交互
java·vue.js·spring boot·前端框架·intellij-idea·交互·css3
神雕杨2 小时前
node js 过滤空白行
开发语言·前端·javascript
飞的肖2 小时前
从测试服务器手动热部署到生产环境的实现
java·服务器·系统架构
周伯通*2 小时前
策略模式以及优化
java·前端·策略模式
两点王爷2 小时前
Java读取csv文件内容,保存到sqlite数据库中
java·数据库·sqlite·csv