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);
  • 相关阅读:
    淘宝长仁:JVM性能指标的理论极限和衡量方法(TaobaoJVM)
    你不知道的5个JVM命令行标志
    Java 内存模型 JMM
    Java虚拟机深入研究
    java内存区域——daicy
    Java里的堆(heap)栈(stack)和方法区(method)
    JVM学习笔记-操作数栈(Operand Stack)
    c# 网页打印全流程
    备忘录模式实例1
    加密程序-注册方法实现
  • 原文地址:https://www.cnblogs.com/lwngreat/p/5893058.html
Copyright © 2011-2022 走看看