Notes

观察者模式

概念

目标保存了一个对其依赖的对象(观察者)列表,在自身(目标)状态发生变化时通知这些观察者。通知的使用广播的方式

示例代码,实现一个简单的观察者模式

var Subject = (function(){
    function Subject() {
        this.observer_list = []; // 观察者列表
    }
    
    // 添加观察者
    Subject.prototype.add_observer = function(obj) {
        this.observer_list.push(obj);
    };
    
    // 移除观察者
    Subject.prototype.remove_observer = function(obj) {
        for (var i = 0; i < this.observer_list.length; i++) {
            if (this.observer_list[i] === obj) {
                return this.observer_list.splice(i, 1);
            }
        }
    };
    
    // 自身状态发生改变,通知观察者
    Subject.prototype.notify = function() {
        var args = Array.prototype.slice.call(arguments, 0);
        for (var i = 0; i < this.observer_list.length; i++) {
            this.observer_list[i].update(args); // 观察者需要对应实现 update 方法
        }
    };
    
    return Subject;
})();