-
- 被观察者
-
- 具体的事件
-
观察者
-
- 具体事件的具体观察者
-
主题
-
- 具体的主题—>事件中心
-
验证事件中心
-
总结
==================================================================
event一种我们在代码中经常使用的对象。我们通过一定的方式创建出一个event,然后调用上下文将event发送出去。对应的listener就会收到消息并执行响应的逻辑。
我们都知道这种基于“事件”的开发中,用到设计模式就是观察者模式(也叫发布订阅模式),那么什么是观察者模式呢?
=====================================================================
观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。
========================================================================
在观察者模式中有三个要素:
-
主题,也就是我们的事件中心
-
观察者,众多listener
-
被观察的对象,各种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)]