发布-订阅模式

  接着学习《JavaScript设计模式与开发实践》一书。

  书中用售楼处发给订阅者楼房信息短信的例子,说明了发布-订阅模式。一个发布-订阅模式,总结来说,由以下几条:

  1.首先要指定好谁充当发布者,比如售楼处;

  2.然后给发布者添加一个缓存列表,用于存放回调函数以便通知订阅者;

  3.最后发布消息的时候,发布者会遍历这个缓存列表,依次触发里面存放的订阅者回调函数。

  

    var salesOffices = {};
    salesOffices.clientList = [];
    salesOffices.listen = function (fn) {
        this.clientList.push(fn);
    };
    salesOffices.trigger = function () {
        for (var i = 0, fn; fn = this.clientList[i++];) {
            fn.apply(this, arguments);
        }
    };

   对多态的再次理解。

  多态:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。

  要实现对象的多态性,就要把不变的部分分隔出来,然后把可变的部分各自封装起来。以鸡鸭发声的那个例子讲,首先我们把不变的部分隔离出来,那就是所用的动物都会发出叫声:

        var makeSound = function (animal) {
            animal.sound();
        };

然后把可变的部分各自封装起来,我们刚才提到的多态性实际指的是对象的多态性:

        var Duck = function () {};
        Duck.prototype.sound = function () {
            console.log('嘎嘎嘎');
        };

        var Chicken = function () {};
        Chicken.prototype.sound = function () {
            console.log('咯咯咯');
        };
        makeSound(new Duck());
        makeSound(new Chicken());

 

posted @ 2017-03-21 20:44  姜瑞涛  阅读(220)  评论(0编辑  收藏  举报