前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用LOL获得BUFF场景来看待Guava之事件总线

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

原创
作者头像
诺浅
修改2020-08-20 18:03:35
3720
修改2020-08-20 18:03:35
举报
文章被收录于专栏:工具使用工具使用

栗子

代码语言:txt
复制
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的处理,你就可以采用如下代码

代码语言:txt
复制
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
image.png

异步

代码语言:txt
复制
public static void main(String[] args) {
    AsyncEventBus bus = new AsyncEventBus();
    bus.register(new Listener());
    bus.post(new DragonetBuff());
}

与Spring结合使用

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

代码语言:txt
复制
@Component
public class AsyncEventBusBean {

    @Bean
    public AsyncEventBus asyncEventBus() {
        AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(10));
        eventBus.register(new xxx());
        return eventBus;
    }
}
代码语言:txt
复制
@Autowired
private AsyncEventBus asyncEventBus;
asyncEventBus.post(xxx);

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 栗子
  • 应用场景
  • 异步
  • 与Spring结合使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档