当前位置:首页 > Java

java如何实现监听

2026-02-05 01:47:36Java

监听器模式实现

在Java中,监听器模式通常通过定义事件、监听器接口和事件源来实现。事件源负责注册监听器并在特定事件发生时通知它们。

定义监听器接口:

public interface EventListener {
    void onEvent(EventObject event);
}

创建事件源类:

public class EventSource {
    private List<EventListener> listeners = new ArrayList<>();

    public void addListener(EventListener listener) {
        listeners.add(listener);
    }

    public void removeListener(EventListener listener) {
        listeners.remove(listener);
    }

    public void fireEvent(EventObject event) {
        for (EventListener listener : listeners) {
            listener.onEvent(event);
        }
    }
}

使用Java内置事件模型

Java提供了java.util.EventObject和java.util.EventListener作为基础类,可以基于这些类构建监听系统。

自定义事件类:

public class CustomEvent extends EventObject {
    public CustomEvent(Object source) {
        super(source);
    }
}

实现具体监听器:

public class CustomListener implements EventListener {
    @Override
    public void onEvent(EventObject event) {
        if (event instanceof CustomEvent) {
            System.out.println("Custom event received");
        }
    }
}

观察者模式实现

Java的java.util.Observable类和java.util.Observer接口提供了另一种监听机制。

创建被观察者:

public class ObservableData extends Observable {
    private String data;

    public void setData(String data) {
        this.data = data;
        setChanged();
        notifyObservers(data);
    }
}

创建观察者:

public class DataObserver implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        System.out.println("Data changed to: " + arg);
    }
}

注解驱动监听

现代Java框架如Spring提供了基于注解的监听机制。

Spring事件监听示例:

@Component
public class AnnotationListener {
    @EventListener
    public void handleContextEvent(ContextRefreshedEvent event) {
        System.out.println("Context refreshed event received");
    }
}

响应式编程监听

使用Java 9+的Flow API或Reactor等响应式库可以实现更现代的监听模式。

Flow API示例:

java如何实现监听

public class FlowListener implements Subscriber<String> {
    private Subscription subscription;

    @Override
    public void onSubscribe(Subscription subscription) {
        this.subscription = subscription;
        subscription.request(1);
    }

    @Override
    public void onNext(String item) {
        System.out.println("Received: " + item);
        subscription.request(1);
    }

    @Override
    public void onError(Throwable throwable) {
        throwable.printStackTrace();
    }

    @Override
    public void onComplete() {
        System.out.println("Done");
    }
}

分享给朋友:

相关文章

vue如何实现登录

vue如何实现登录

Vue 实现登录功能的方法 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,通常命名为 Login.vue。表单包含用户名和密码输入框,以及提交按钮。 <template>…

如何自学java

如何自学java

选择合适的学习资源 从官方文档开始,Oracle提供的Java官方教程(Java Tutorials)是权威且免费的学习资料。在线平台如Codecademy、Coursera或Udemy提供互动式课程…

java如何导包

java如何导包

导入包的方法 在Java中,导入包(package)可以通过import语句实现,用于引入其他类或包中的功能。以下是几种常见的导包方式: 导入单个类 import java.util.ArrayL…

前段vue如何实现

前段vue如何实现

Vue 前端实现方法 Vue 是一款流行的前端框架,用于构建用户界面。以下是一些常见的 Vue 实现方法: 组件化开发 Vue 的核心思想是组件化开发。每个组件可以独立封装逻辑、模板和样式,便于复用…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

如何成为java架构师

如何成为java架构师

掌握扎实的Java基础 深入理解Java核心知识,包括多线程、集合框架、JVM原理、设计模式等。熟悉Java生态中的常用框架如Spring、MyBatis、Hibernate等,并能分析其源码实现。…