目标保存了一个对其依赖的对象(观察者)列表,在自身(目标)状态发生变化时通知这些观察者。通知的使用广播的方式
示例代码,实现一个简单的观察者模式
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;
})();