• Javascript 观察者模式


    一、实现观察者模式需要三个对象

    1、观察者,主要寄宿在发行商对象上,一般不会单独使用

    2、发行商,用于发布消息的对象

    3、订阅者,接收通知的对象

    二、观察者对象应该具有的方法和属性

      1.由回调函数构成的订阅者数组

      2.用于添加和删除订阅者的addSubscriber()和removeSubscriber()方法。

      3.publish()方法,发布消息

      4.make()方法,将任意对象转变为一个发行商并为其添加上述方法(即,将观察者寄宿在发行商)

    var observer = {
        addSubscriber: function (callback) {
            this.subscribers[this.subscribers.length] = callback;
        },
        removeSubscriber: function (callback) {
            for (var i = 0; i < this.subscribers.length; i++) {
                if (this.subscribers[i] === callback) {
                    delete (this.subscribers[i]);
                }
            }
        },
        publish: function (what) {
            for (var i = 0; i < this.subscribers.length; i++) {
                if (typeof this.subscribers[i] === 'function') {
                    this.subscribers[i](what);
                }
            }
        },
        make: function (o) {
            for (var i in this) {
                o[i] = this[i];
                o.subscribers = [];
            }
        }
    }

    三、发行商 (任意一个对象)

    var blogger = {
        writeBlogPost: function () {
            var content = 'Today is ' + new Date();
            this.publish(content);
        }
    };
    observer.make(blogger);

    四、观察者

    var jack = {
        read: function (what) {
            console.log("I read " + what);
        }
    };
    var bill = {
        read: function (what) {
            Console.log("bill read" + what);
        }
    };
    
    blogger.addSubscriber(jack.read);
    blogger.addSubscriber(bill.read);

    五、发布消息

    blogger.writeBlogPost();
    //取消订阅
    //blogger.removeSubscriber(bill.read);
  • 相关阅读:
    C++相关资料
    OpenCV相关资料参考
    QT-undefined reference to vtable
    QToolButton弹出菜单
    QT-信号和槽机制
    了解字符集和编码
    apache配置Directory目录权限的一些配置
    linux用户(组)及文件权限说明
    Linux下重要日志文件及查看方式
    四种常见的 POST 提交数据方式
  • 原文地址:https://www.cnblogs.com/lwngreat/p/5893058.html
Copyright © 2020-2023  润新知