当前位置:首页 > 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 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化。以下分模块详细说明其实现机制。 响应式系统 Vue 2.x 使用 Object.defineProper…

vue手写签名如何实现

vue手写签名如何实现

实现 Vue 手写签名的步骤 使用 canvas 实现基础签名功能 在 Vue 项目中创建一个组件,利用 HTML5 的 canvas 元素实现手写签名功能。通过监听鼠标或触摸事件来捕获用户的绘制路径…

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

vue如何实现登录

vue如何实现登录

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