【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
【摘要】
文章目录
一、发布-订阅模式二、代码实现发布-订阅模式1、订阅者接口2、订阅者实现类3、发布者4、调度中心5、客户端
一、发布-订阅模式
发布订阅模式 :
发...
一、发布-订阅模式
发布订阅模式 :
- 发布者 Publisher : 状态改变时 , 向 消息中心 发送事件 ;
- 订阅者 Subscriber : 到 消息中心 订阅自己关心的事件 ;
- 消息中心 : 负责维护一个 消息队列 , 根据 消息类型 将 消息 转发给 对应的 订阅者 ;
下面按照该结构实现一个简单的 发布-订阅模式 ;
二、代码实现发布-订阅模式
1、订阅者接口
/**
* 订阅者
*/
public interface Subscriber {
/**
* 处理事件
* @param msg 接收到的事件
*/
void onEvent(String msg);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2、订阅者实现类
订阅者实现类 1 :
public class Subscriber1 implements Subscriber {
@Override
public void onEvent(String msg) {
System.out.println("Subscriber1 订阅者收到消息 " + msg);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
订阅者实现类 2 :
public class Subscriber2 implements Subscriber {
@Override
public void onEvent(String msg) {
System.out.println("Subscriber2 订阅者收到消息 " + msg);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
3、发布者
/**
* 发布者
*/
public class Publisher {
/**
* 发布消息
* @param msg 要发布的消息
*/
public void post(String msg) {
Dispatcher.getInstance().post(msg);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
4、调度中心
调度中心提供如下功能 :
- 订阅者队列 : 维护一个订阅者集合 , 收到消息后 , 需要将数据发送给各个订阅者 ;
- 注册订阅者 : 可以添加订阅者到集合中 ;
- 删除订阅者 : 将订阅者从集合中删除 ;
import java.util.ArrayList;
import java.util.List;
/**
* 调度中心
*/
public class Dispatcher {
/**
* 维护订阅者集合
*/
private List<Subscriber> subscribers;
/**
* 单例模式实例对象
*/
private static Dispatcher instance;
private Dispatcher() {
this.subscribers = new ArrayList<>();
}
public static Dispatcher getInstance() {
if (instance == null) {
instance = new Dispatcher();
}
return instance;
}
/**
* 注册订阅者
* @param subscriber
*/
public void register(Subscriber subscriber) {
subscribers.add(subscriber);
}
/**
* 取消订阅者
* @param subscriber
*/
public void unregister(Subscriber subscriber) {
subscribers.remove(subscriber);
}
/**
* 发送消息
* 将接收到的事件发送给订阅者
* @param msg
*/
public void post(String msg) {
for (int i = 0; i < subscribers.size(); i++) {
subscribers.get(i).onEvent(msg);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
5、客户端
public class Client {
public static void main(String[] args) {
// 创建订阅者
Subscriber1 subscriber1 = new Subscriber1();
Subscriber2 subscriber2 = new Subscriber2();
// 注册订阅者
Dispatcher.getInstance().register(subscriber1);
Dispatcher.getInstance().register(subscriber2);
// 创建发布者
Publisher publisher = new Publisher();
// 发布消息
publisher.post("Hello");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
执行结果 :
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/120430849
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)