我本身是做java开发的,使用的观察者模式也是java来实现的,我换成javascript来实现下(参考下),
function A(){
this.observers = [];//保存被观察者对象
}
A.prototype.setProps = function(props){
this.props = props;
//通知观察者
for(var i = 0;i < this.observers.length;i++){
this.observers[i].update(this,props);
}
};
A.prototype.getProps = function(props){
return this.props;
};
//添加观察者
A.prototype.addObserver = function(observer){
for(var i = 0;i < this.observers.length;i++){
if(this.observers[i] == observer){//已经存在直接返回
return;
}
}
this.observers.push(observer);
};
//移除观察者
A.prototype.removeObserver = function(observer){
for(var i = 0;i < this.observers.length;i++){
if(this.observers[i] == observer){
this.observers = this.observers.splice(i,1);
return;
}
}
};
//观察者1
var b = {};
b.update = function(observerable,data){
alert("b->"+data);
};
//观察者2
var c = {};
c.update = function(observerable,data){
alert("c->" + data);
};
//被观察的对象
var a = new A();
//添加观察者b
a.addObserver(b);
//添加观察者c
a.addObserver(c);
//当prop属性改变的时候,会自动调用观察者的update()方法。
a.setProps("helloworld");
//删除观察者b
a.removeObserver(b);
a.setProps("helloworld2");
//本例子可以写成优化为使用继承的方式来实现,达到代码的复用。