当前位置:首页 > 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);
    }
}

实现具体监听器:

java如何实现监听

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);
    }
}

创建观察者:

java如何实现监听

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示例:

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 可以通过多种方式实现组件分离,提升代码的可维护性和复用性。以下是几种常见的方法: 单文件组件 (SFC) Vue 的单文件组件(.vue 文件)将模板、脚本和样式…

java如何编译

java如何编译

编译Java程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Jav…

h5如何实现vr效果

h5如何实现vr效果

使用WebXR API实现VR效果 WebXR是浏览器中实现VR/AR的核心API,支持设备姿态追踪、渲染交互等功能。需在支持WebXR的设备(如Oculus、HTC Vive)或浏览器模拟环境中运行…

vue如何实现增删

vue如何实现增删

使用 Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是具体实现方法: 数据定义与初始化 在 Vue 组件的 data 选项中定义数组来存储需要操作的数据…

vue如何实现计算

vue如何实现计算

Vue 计算属性的实现方法 在 Vue 中,计算属性(computed properties)是一种基于响应式依赖进行缓存的属性,适用于处理复杂逻辑或依赖其他数据属性的场景。以下是实现计算属性的几种方…

vue如何实现单选

vue如何实现单选

使用原生 HTML 单选按钮 在 Vue 中可以直接使用 HTML 的原生单选按钮,通过 v-model 绑定数据。 <template> <div>…