事件中心与观察者模式

    • 被观察者
    • 具体的事件
  • 观察者

    • 具体事件的具体观察者
  • 主题

    • 具体的主题—>事件中心
  • 验证事件中心

  • 总结

楔子

==================================================================

event一种我们在代码中经常使用的对象。我们通过一定的方式创建出一个event,然后调用上下文将event发送出去。对应的listener就会收到消息并执行响应的逻辑。

我们都知道这种基于“事件”的开发中,用到设计模式就是观察者模式(也叫发布订阅模式),那么什么是观察者模式呢?

观察者模式

=====================================================================

观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。

事件中心demo

========================================================================

在观察者模式中有三个要素:

  1. 主题,也就是我们的事件中心

  2. 观察者,众多listener

  3. 被观察的对象,各种event

好了,定义我们已经了解了,那么如何使用观察者模式实现一个事件中心呢?

被观察者


首先我们定一下被观察者,也就是我们的事件对象

/**

  • 事件

  • @author skyline

*/

public class BaseEvent {

private final Object data;

public BaseEvent(Object data) {

this.data = data;

}

public Object getData() {

return data;

}

}

具体的事件

从事件基类中继承而来的一个具有业务场景的具体事件。

/**

  • 到家了事件

  • @author skyline

*/

public class GetHomeEvent extends BaseEvent {

public GetHomeEvent(String userName) {

super(userName);

}

}

观察者


接下来我们定义一下观察者

/**

  • 事件监听者

  • @author skyline

*/

public interface IEventListener {

/**

  • 监听,当有事件到来时,这个方法会被调用

  • @param event 事件

*/

void listener(T event);

}

具体事件的具体观察者

/**

  • 空气净化器对回家监听

*/

public class AirCleanerGetHomeListener implements IEventListener {

private static final Logger logger = LoggerFactory.getLogger(AirCleanerGetHomeListener.class);

@Override

public void listener(GetHomeEvent event) {

logger.info(“[{}]回来了,空气净化器已打开”, event.getData());

}

}

/**

  • wifi对回家监听

*/

public class WifiGetHomeListener implements IEventListener {

private static final Logger logger = LoggerFactory.getLogger(WifiGetHomeListener.class);

@Override

public void listener(GetHomeEvent event) {

logger.info(“WiFi已自动连接到[{}]的手机”, event.getData());

}

}

主题


主题,也就是我们的事件中心。事件中心有两大基本能力,注册和发布

/**

  • 事件中心

  • @author skyline

*/

public interface IEventCenter {

/**

  • 发布事件

  • @param event

*/

void publishEvent(BaseEvent event);

/**

  • 注册事件

  • @param eventListener

*/

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

美团二面惜败,我的凉经复盘(附学习笔记+面试整理+进阶书籍)

t(BaseEvent event);

/**

  • 注册事件

  • @param eventListener

*/

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

[外链图片转存中…(img-btUiddvu-1719811904550)]

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值