zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    笑话几则
    .net 知识点滴
    LoadRunner本机录制http协议程序遇到的问题以及解决方法
    40款非常棒的 jQuery 插件和制作教程(系列二)
    50个极佳的企业网站案例
    jQuery ui effects
    9个优秀网上免费标签云生成工具
    30 +创意的登录页面设计灵感
    分享一个jQuery的时间轴插件:TimergliderJS
    36个非常有趣的互动网站设计作品范例
  • 原文地址:https://www.cnblogs.com/lwngreat/p/5893058.html
Copyright © 2011-2022 走看看