类似Eventbus自定义

EventBus 是一种用于简化组件间通信的发布-订阅模式事件总线。它允许在应用程序的不同部分之间解耦通信,例如 Activities, Fragments 和 Services 之间。为了创建一个类似于 EventBus 的自定义实现,我们需要考虑以下几个关键点:

事件模型:定义如何表示和处理事件。
发布/订阅机制:实现注册监听器、发布事件以及注销监听器的功能。
线程调度:决定事件是在哪个线程中被分发。
生命周期管理:确保监听器在其所有者(如 Activity 或 Fragment)销毁时正确地注销。
下面是一个非常简化的自定义 EventBus 实现示例。请注意,这只是一个基础版本,并不包含实际 EventBus 库的所有特性,比如线程调度、粘性事件等高级功能。

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

// 定义一个简单的接口,所有事件处理器都需要实现这个接口。
interface EventListener {
    void onEvent(Object event);
}

// 自定义的 EventBus 类。
public class CustomEventBus {

    private static final CustomEventBus instance = new CustomEventBus();
    private final List<EventListener> listeners = new ArrayList<>();

    // 私有构造函数保证单例模式。
    private CustomEventBus() {}

    // 获取单例实例。
    public static CustomEventBus getInstance() {
        return instance;
    }

    // 注册监听器。
    public void register(EventListener listener) {
        if (!listeners.contains(listener)) {
            listeners.add(listener);
        }
    }

    // 注销监听器。
    public void unregister(EventListener listener) {
        listeners.remove(listener);
    }

    // 发布事件给所有已注册的监听器。
    public void post(Object event) {
        for (EventListener listener : listeners) {
            listener.onEvent(event);
        }
    }
}

// 使用示例:
// 假设我们有一个具体的事件类型 MyEvent。
class MyEvent {
    // 这里可以添加任何你想要传递的数据。
}

// 然后我们可以创建一个监听器,当特定事件发生时执行某些操作。
CustomEventBus.getInstance().register(new EventListener() {
    @Override
    public void onEvent(Object event) {
        if (event instanceof MyEvent) {
            // 处理 MyEvent...
        }
    }
});

// 在需要的地方发布事件。
CustomEventBus.getInstance().post(new MyEvent());
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容