【java】简单的事件总线EventBus

public class EventBus {

    private static Map<String, EventListener> eventListeners = new HashMap<>();

    public static void addEventListener(EventListener listener) {
        String listenerName = getListenerName(listener);
        eventListeners.put(listenerName, listener);
    }

    public static void removeEventListener(EventListener listener) {
        String listenerName = getListenerName(listener);
        eventListeners.remove(listenerName);
    }

    public static void sendEvent(Event event) {
        Collection<EventListener> listeners = eventListeners.values();
        for (EventListener listener : listeners) {
            if (listener != null) {
                listener.onEvent(event);
            }
        }
    }

    private static String getListenerName(TMSEventListener listener) {
        String listenerName = listener.getName();
        if (StringUtils.isBlank(listenerName)) {
            listenerName = listener.getClass().getName();
        }
        return listenerName;
    }

}
public interface EventListener {

    /**
     * 监听到事件后会调用此函数
     * @param event
     */
    public void onEvent(Event event);

    /**
     * 事件监听器的唯一名字
     * @return 字符串
     */
    public String getName();
}
public class Event {

    private String name;
    private Object data;

    public Event() {
    }

    public Event(String name,Object data) {
        this.data = data;
        this.name = name;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

  

时间: 2024-11-06 05:42:53

【java】简单的事件总线EventBus的相关文章

【Java】一个最简单的事件总线实现

一个最简单的事件总线实现 MicroBus 使用 注册 class Receiver implements MicroBus.BusEventReceiver { public onCreate() { bus.register(this, String.class); } public onDestroy() { bus.unregister(this, String.class); } @Override public void onBusEvent(Object event) { if (

自己动手写事件总线(EventBus)

本文由云+社区发表 事件总线核心逻辑的实现. EventBus的作用 Android中存在各种通信场景,如Activity之间的跳转,Activity与Fragment以及其他组件之间的交互,以及在某个耗时操作(如请求网络)之后的callback回调等,互相之之间往往需要持有对方的引用,每个场景的写法也有差异,导致耦合性较高且不便维护.以Activity和Fragment的通信为例,官方做法是实现一个接口,然后持有对方的引用,再强行转成接口类型,导致耦合度偏高.再以Activity的返回为例,一

教你自己实现一个事件总线EventBus

EventBus是一个Github上著名的开源事件总线框架,想必很多人都使用过它.它实现了事件订阅者和事件发布者的解耦,让我们更加容易在actvity等组件间传递信息. 我们虽然不喜欢重复造轮子,但是不代表我们不需要了解轮子是怎么造的. 这篇文章通过这个简单的实例,给大家说明EventBus实现的原理,一起来打造一个简单的事件总线框架.如果你明白了这个框架的设计原理,那么EventBus也就相差不大,两者比起来只是后者更加完善和高效. 这也给看源码的朋友带来便利,大家可以先尝试看我这篇文章,再去

Guava: 事件总线EventBus

EventBus 直译过来就是事件总线,它使用发布订阅模式支持组件之间的通信,不需要显式地注册回调,比观察者模式更灵活,可用于替换Java中传统的事件监听模式,EventBus的作用就是解耦,它不是通用的发布订阅系统,也不能用于进程间通信.可用于Android的EventBus库主要有这几个:Google出品的Guava,Guava是一个庞大的库,EventBus 只是它附带的一个小功能,因此实际项目中使用并不多.用的最多的是greenrobot/EventBus,这个库的优点是接口简洁,集成方

android事件总线(eventbus)设计与实现

1. 功能介绍 AndroidEventBus是一个Android平台的事件总线库, 它简化了Activity.Fragment.Service等组件或者对象之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量. AndroidEventBus吸收了greenrobot的EventBus以及square的otto的优点,并在此基础上做出了相应的改进,使得事件总线框架更适合用户的使用习惯,也使得事件的投递更加的精准.灵活. 与EventBus.otto

事件总线EventBus使用详解

EventBus源码解析 概述 EventBus是针一款对Android的发布/订阅事件总线.它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代码的可读性更好,耦合度更低. 如何使用 (1)首先需要定义一个消息类,该类可以不继承任何基类也不需要实现任何接口.如: 123 public class MessageEvent { ......} (2)在需要订阅事件的地方注册事件 1 EventBus.getDefault().register(this); (3)产生事件,即发送

android事件总线(eventbus)开源库发布

 AndroidEventBus 如果你不知道事件总线是什么,那么没有关系,下面我们先来看这么一个场景: 你是否在开发的过程中遇到过想在Activity-B中回调Activity-A中的某个函数,但Activity又不能手动创建对象来设置一个Listener什么的? 你是否想在某个Service中想更新Activity或者Fragment中的界面? 等等之类的组件之间的交互问题-- 一经思考,你会发现Android中的Activity, Fragment, Service之间的交互是比较麻烦的,

事件总线 EventBus

661. .net中事件模型很优雅的实现了观察者模式,同时被大量的使用在各种框架中. [2016-04-30 10:52:42]662. Prism框架中实现了一个典型的EventAggregator,有时候我们又把此类实现叫做EventBus. [2016-04-30 10:53:12]663. EventBus内部通过一个类型为ConcurrentDictionary<Type,List<Action<object>>> 的字典来存储主题和观察者列表 [2016-0

Android 开源框架 ( 七 ) 事件总线---EventBus

一.引言          与四大组件之一的BroadCast广播比较,广播主要监听系统级事件,比如网络切换,电池电量等属于进程间的通信,EventBus 是进程内的通信.         了解BroadCast 可以查看该文章:Android 四大组件 (三) BroadcastReceiver 介绍 二.基本使用 引入类库: compile 'com.jakewharton:butterknife:8.5.1' 页面打开时候初始化并注册EventBus //初始化 @Override pro