专栏首页工具使用用LOL获得BUFF场景来看待Guava之事件总线
原创

用LOL获得BUFF场景来看待Guava之事件总线

栗子

public class TestPreconditions {

    static class Listener {
    
        @Subscribe
        public void listen(String eventData) {
            System.out.println("接收到事件数据:" + eventData);
        }

        @Subscribe
        public void listen(Integer eventData) {
            System.out.println("接收到事件int数据:" + eventData);
        }
    }

    public static void main(String[] args) {

        EventBus bus = new EventBus();
        bus.register(new Listener());

        bus.post("这是事件数据!");
        bus.post(123456);
    }
}

结果:

在这里插入图片描述

应用场景

我们假设你需要设计一个lol里面各种英雄获得buff的处理,你就可以采用如下代码

public class TestLolBuff {
    //蓝buff
    static class BlueBuff {
    }

    //红buff
    static class RedBuff {
    }

    //小龙buff
    static class DragonetBuff {
    }

    //大龙buff
    static class BaronBuff {
    }

    static class Listener {

        @Subscribe
        public void listen(BlueBuff eventData) {
            System.out.println("我得到了蓝buff:");
        }

        @Subscribe
        public void listen(RedBuff eventData) {
            System.out.println("我得到了红buff:");
        }

        @Subscribe
        public void listen(DragonetBuff eventData) {
            System.out.println("我得到了小龙buff:");
        }

        @Subscribe
        public void listen(BaronBuff eventData) {
            System.out.println("我得到了大龙buff:");
        }
    }

    public static void main(String[] args) {
        EventBus bus = new EventBus();
        bus.register(new Listener());
        bus.post(new DragonetBuff());
    }
}

输出:

image.png

异步

public static void main(String[] args) {
    AsyncEventBus bus = new AsyncEventBus();
    bus.register(new Listener());
    bus.post(new DragonetBuff());
}

与Spring结合使用

每次都new AsyncEventBus();这种方式为免有点太low,可以使用@Bean注解构建一个Bean对象

@Component
public class AsyncEventBusBean {

    @Bean
    public AsyncEventBus asyncEventBus() {
        AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(10));
        eventBus.register(new xxx());
        return eventBus;
    }
}
@Autowired
private AsyncEventBus asyncEventBus;
asyncEventBus.post(xxx);

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Guava Cache用法介绍(极简版)

    看了官方的关于Guava Cache的介绍,感觉太过于啰嗦,我个人是很不喜欢,看了好大半天也看不懂,直到翻到了一篇国内的文章才看懂,特此记录,以备查阅。

    诺浅
  • Activiti7入门Demo

    需要注意的是idea64.exe.vmoptions 这个文件可能有多个,别改错了。

    诺浅
  • Guava字符串的处理

    一步将字符串转为List<Long>集合(前面先转为list<String>,后面用java8特性将List<String>转为List<Long>)

    诺浅
  • 【小家Java】JDK动态代理技术,你真学会了吗?(Proxy、ProxyClassFactory)

    动态代理技术,相信我们都并不陌生。特别是在Spring框架内,大量的使用到了反射以及动态代理技术。但是如果我们只是停留在平时的运用阶段,此篇文章你其实是可以跳过...

    YourBatman
  • Spring服务定制

    问题总述 ​ 我们都知道如果使用Spring来进行bean管理的时候。如果同一个接口的实现类存在两个,直接使用@Autowired注解来实现bean注入,会在启...

    SecondWorld
  • 我通过三个故事终于学明白了三种工厂模式

    接下来创建一个工厂类,功能是提供给用户的出行的方式,用户只需要告诉工厂类他需要什么方式就好了。

    TrueDei
  • 【Java编程实战】Metasploit_Java后门运行原理分析以及实现源码级免杀与JRE精简化

    某日午睡迷迷糊糊梦到Metasploit里有个Java平台的远控载荷,梦醒后,打开虚拟机,在框架中搜索到了这个载荷

    重生信息安全
  • 【设计模式】——工厂方法FactoryMethod

      前言:【模式总览】——————————by xingoo   模式意图   工厂方法在MVC中应用的很广泛。   工厂方法意在分离产品与创建的两个层次,使用...

    用户1154259
  • 深入理解《单例模式》之源码分析

    执行这段代码会发现o1<>o2,这就破坏了单例。 为什么呢?罪魁祸首就是如下代码,它是反射的newInstance()的底层实现。

    本人秃顶程序员
  • 10(01)总结形式参数,包,修饰符,内部类

    类,抽象类,接口的综合小练习 /* 教练和运动员案例(学生分析然后讲解) 乒乓球运动员和篮球运动员。 乒乓球教练和篮球教练。 为了出国交流,跟乒乓球相关...

    Java帮帮

扫码关注云+社区

领取腾讯云代金券