java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java监听器Listener

一文详解Java中的监听器(Listener)

作者:向前冲的小牛

这篇文章主要介绍了Java中监听器(Listener)的相关资料,监听器模式是一种设计模式,用于处理异步事件和通知,文中通过代码介绍的非常详细,需要的朋友可以参考下

1,监听器模式的基本原理

监听器模式由以下几个部分组成:

监听器模式的步骤

2,实际应用场景 

2.1  图形用户界面(GUI)事件处理

监听器模式广泛应用于图形用户界面(GUI)编程中,用于处理用户交互事件。

JButton button = new JButton("Click Me");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Button clicked!");
    }
});

2.2 数据模型更新通知

监听器模式用于通知数据模型的变化,通常用于实现观察者模式。当数据发生变化时,所有注册的监听器都会被通知更新。

public class DataModel {
    private List<DataChangeListener> listeners = new ArrayList<>();

    public void addDataChangeListener(DataChangeListener listener) {
        listeners.add(listener);
    }

    public void removeDataChangeListener(DataChangeListener listener) {
        listeners.remove(listener);
    }

    public void notifyDataChange() {
        for (DataChangeListener listener : listeners) {
            listener.dataChanged();
        }
    }
}

public interface DataChangeListener {
    void dataChanged();
}

2.3  日志系统

日志系统可以使用监听器模式将日志信息发送到多个不同的目的地(例如控制台、文件、远程服务器等)。

public class Logger {
    private List<LogListener> listeners = new ArrayList<>();

    public void addLogListener(LogListener listener) {
        listeners.add(listener);
    }

    public void removeLogListener(LogListener listener) {
        listeners.remove(listener);
    }

    public void log(String message) {
        for (LogListener listener : listeners) {
            listener.onLog(message);
        }
    }
}

public interface LogListener {
    void onLog(String message);
}

2.4 文件系统监控

监听器模式用于监控文件系统的变化,例如文件的创建、修改、删除等事件。 

Path path = Paths.get("/path/to/directory");
WatchService watchService = FileSystems.getDefault().newWatchService();
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

while (true) {
    WatchKey key = watchService.take();
    for (WatchEvent<?> event : key.pollEvents()) {
        WatchEvent.Kind<?> kind = event.kind();
        Path fileName = (Path) event.context();
        System.out.println(kind + ": " + fileName);
    }
    key.reset();
}

2.5 网络和分布式系统

监听器模式用于处理网络和分布式系统中的异步事件,例如消息的到达、连接的建立或断开等。

public interface MessageListener {
    void onMessage(String message);
}

public class MessageQueue {
    private List<MessageListener> listeners = new ArrayList<>();

    public void addMessageListener(MessageListener listener) {
        listeners.add(listener);
    }

    public void removeMessageListener(MessageListener listener) {
        listeners.remove(listener);
    }

    public void receiveMessage(String message) {
        for (MessageListener listener : listeners) {
            listener.onMessage(message);
        }
    }
}

2.6 任务调度和异步处理

监听器模式用于任务调度和异步处理,允许任务在完成后通知监听器进行后续处理。

public interface TaskCompleteListener {
    void onTaskComplete();
}

public class Task {
    private List<TaskCompleteListener> listeners = new ArrayList<>();

    public void addTaskCompleteListener(TaskCompleteListener listener) {
        listeners.add(listener);
    }

    public void removeTaskCompleteListener(TaskCompleteListener listener) {
        listeners.remove(listener);
    }

    public void complete() {
        for (TaskCompleteListener listener : listeners) {
            listener.onTaskComplete();
        }
    }
}

3 自定义监听器

3.1 Java 中常见的监听器接口

3,2 使用自定义监听器 

有时你可能需要定义自己的事件和监听器。以下是一个示例,展示如何创建和使用自定义监听器。

3,2,1 定义事件类

import java.util.EventObject;

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

3.2.2 定义监听器接口

import java.util.EventListener;

public interface CustomEventListener extends EventListener {
    void handleEvent(CustomEvent event);
}

3.2.3 实现事件源类

import java.util.ArrayList;
import java.util.List;

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

    public void addCustomEventListener(CustomEventListener listener) {
        listeners.add(listener);
    }

    public void removeCustomEventListener(CustomEventListener listener) {
        listeners.remove(listener);
    }

    public void triggerEvent() {
        CustomEvent event = new CustomEvent(this);
        for (CustomEventListener listener : listeners) {
            listener.handleEvent(event);
        }
    }
}

3.2.4 使用自定义监听器

public class CustomEventListenerExample {
    public static void main(String[] args) {
        EventSource eventSource = new EventSource();

        // 添加自定义事件监听器
        eventSource.addCustomEventListener(new CustomEventListener() {
            @Override
            public void handleEvent(CustomEvent event) {
                System.out.println("Custom event triggered!");
            }
        });

        // 触发事件
        eventSource.triggerEvent();
    }
}

4 总结

监听器模式是一种强大的设计模式,适用于需要处理异步事件和通知的场景。通过使用监听器模式,可以实现松耦合的事件处理逻辑,提高代码的可维护性和扩展性。无论是在 GUI 编程、数据模型更新、日志系统、文件系统监控、网络编程还是任务调度中,监听器模式都提供了一种高效的事件处理机制。

到此这篇关于Java中监听器(Listener)的文章就介绍到这了,更多相关Java监听器Listener内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文