• 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>
  • 相关阅读:
    sql语句技巧
    逻辑查询处理的步骤
    left join 和 left outer join的区别
    SQL 笛卡尔积
    SQL 分类
    显示数据库中的表
    数据库备份 恢复
    增删主键及修改表名
    Securing Data笔记
    System Monitoring之"文件系统"
  • 原文地址:https://www.cnblogs.com/xuezizhenchengxuyuan/p/6957553.html
Copyright © 2020-2023  润新知