发布/订阅模式(观察者模式)
观察者模式中存在两种类型的实体,一种是观察者(observer或者subscriber),一种是订阅者发布者或者主体(publisher或subject)。当某事件触发时发布者通知(调用)所有的订阅者并且可以向订阅者传递消息。
报纸订阅例子
paper对象作为publisher对象,拥有subscribers数组属性,subscribe方法,unsubscribe方法以及publish方法。
我们在subscribers中维护我们的订阅者,subscribe方法中添加订阅者到数组中,而unsubscribe方法从数组中移除订阅者,而publish方法则遍历数组并调用它们注册时提供的方法。
所有这些方法还需要有个type参数,因为paper对象可以发射多种类型事件,而我们的订阅者可以只订阅其中一种事件。对于任何的发布者对象这些成员都是一致的,所以我们可以使用mixin模式将他们copy到任何对象中使之成为一个publisher。
简单说明mixin模式,就是将多个对象上的属性混合到一个对象上,如这里简单的实现,只适用于浅拷贝场景:
1 | function mix() { |