一、发布与订阅模式
通常都有一个调度中心管理。订阅者会使用事件名称进行注册。发布者在发布消息的时候,主要是根据事件名称进行发布,并不关心谁注册了该事件。所以该模式实现了发布与订阅之间彻底的解耦。
重点:有一个根据事件名称进行管理的调度中心。
根据上图可知,一般该模型的数据存储使用 Map或Dictionary。即键值<key,value>对形式存储, key 是事件名,value 是列表(数组)。可直接根据key值获取到value值,不需要进行查找。同时该模型,一般都是单例模式(具体根据实际业务来确定,确保事件的统一管理)。
二、观察者模式
只有观察者和被观察者,消息类型单一,只要加入了被观察者中,被观察者一旦发生变化,所有的观察者都会接到消息事件。该模式没有事件名称一说,更不会根据事件名称进行发布事件。
如上图,观察者会被加入被观察者中,可以加入观察者类的实例或加入观察者类中的某方法到被观察者中,被观察者类会进行存储这些数据。数据的存储形式一般使用List或Array等数组格式存储起来。当被观察者中的状态发生改变时,会进行遍历该数组,进行发布事件。
三、两种模式的常用方法与取名:
- 添加:常用 on、add、regist 等开头
- 删除:常用 off、 remove、delete 等开头
- 发布:常用 emit、trigger、publish、notify 等开头
这两种模型的最终目的是解决脚本(类)之间的通信问题,同时实现脚本(类)之间的解耦。发布与订阅模式解耦更加彻底。观察者模式属于松耦合。具体使用根据实际的业务类型而定。