观察者模式

1、observer [观察者模式]

1234567891011121314
class StateTracker{    constructor(){        this.observers = [];        this.internalState= 10;    }    // 改变内部状态,触发状态的观察者列表    change(val){        this.internalState= val;        this.observers.forEach(observer=>observer(val));    }// 注册观察者    registerObserver(ObserverFn){        this.obserers.push(ObserverFn)    }}

2、publish/subscribe [订阅发布模式]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class PubSubHandler{
constructor(){
this.eventPool = {};
}
//移除
off(topicName){
delete this.observers[topicName]
}
//发布
trigger(topicName,...args){
this.eventPool[topicName] &&
this.eventPool[topicName].forEach(callback=>callback(...args));
}
//订阅
on(topicName,callback){
let topic = this.eventPool[topicName] ;
if(!topic){
this.eventPool[topicName] =[]
}
this.eventPool[topicName].push(callback)
}
}

3、singleton[单例模式]
构造函数的实例只有一个,一般是通过闭包存储内部实例,通过接口访问内部实例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var single = () => {
var instance;
var createInstance = () => {
this.a = 1;
this.b = 2;
}
return {
getInstance:() => {
if(!instance) {
instance = createInstance();
}
return instance;
}
}
}