赞
踩
监听器模式由以下几个部分组成:
监听器模式广泛应用于图形用户界面(GUI)编程中,用于处理用户交互事件。
- JButton button = new JButton("Click Me");
- button.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- System.out.println("Button clicked!");
- }
- });
监听器模式用于通知数据模型的变化,通常用于实现观察者模式。当数据发生变化时,所有注册的监听器都会被通知更新。
- 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();
- }

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

监听器模式用于监控文件系统的变化,例如文件的创建、修改、删除等事件。
- 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();
- }
监听器模式用于处理网络和分布式系统中的异步事件,例如消息的到达、连接的建立或断开等。
- 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);
- }
- }
- }

监听器模式用于任务调度和异步处理,允许任务在完成后通知监听器进行后续处理。
- 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();
- }
- }
- }

有时你可能需要定义自己的事件和监听器。以下是一个示例,展示如何创建和使用自定义监听器。
- import java.util.EventObject;
-
- public class CustomEvent extends EventObject {
- public CustomEvent(Object source) {
- super(source);
- }
- }
- import java.util.EventListener;
-
- public interface CustomEventListener extends EventListener {
- void handleEvent(CustomEvent event);
- }
- 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);
- }
- }
- }

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

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