zoukankan      html  css  js  c++  java
  • javascript 观察者模式

     <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>
  • 相关阅读:
    著名的小退问题
    Oracle学习笔记(十二)
    Oracle学习笔记(十一)
    Oracle学习笔记(十)
    Oracle学习笔记(九)
    Oracle学习笔记(八)
    Oracle学习笔记(七)
    Oracle学习笔记(六)
    Oracle学习笔记(五)
    Oracle学习笔记(四)
  • 原文地址:https://www.cnblogs.com/xuezizhenchengxuyuan/p/6957553.html
Copyright © 2011-2022 走看看