<script> function Subject(){ var _this = this this.observers = [] this.attach = function (observer) { _this.observers.push(observer) } this.detach = function(observer){ var index = _this.observers.indexOf(observer) _this.observers.splice(index,1) } this.notifyObservers = function(newState){ for(var i=0;i < _this.observers.length;i++) { (_this.observers[i]).update(newState) } } } function Observer(){ var observerState; this.update =function(state){ observerState = state console.log(state) } } var subject = new Subject() subject.attach(new Observer()) subject.notifyObservers('hello') </script>
上面是仿照java 的观察者模式写的
下面把它修改成发布订阅模式风格:
参考:https://github.com/reactjs/redux/blob/master/src/createStore.js
<script> function Subject(){ var _this = this this.listeners = [] this.subscribe = function (listener) { _this.listeners.push(listener) } this.unsubscribe = function(listener){ var index = _this.listeners.indexOf(listener) _this.listeners.splice(index,1) } this.dispatch = function(newState){ for(var i=0;i < _this.listeners.length;i++) { const listener = (_this.listeners[i]) listener(newState) } } } function listener(data){ console.log(data) } var subject = new Subject() subject.subscribe(listener) subject.dispatch('hello') </script>