记录前端开发学习与积累

观察者模式在前端开发中的应用

本文于462天之前发表,文中内容可能已经过时。如有疑问,欢迎在github中给我留言(用户名:zhangyan123)。

前端开发中观察者模式实践

观察者模式又叫发布订阅模式(Publsih/Subscrbe),它使得方法之间传递信息变得更加通畅,减少耦合性解耦,减少了状态判断。
功能:发布者有一个publish方法,将其参数传递给所有订阅者需要该状态作为参数的方法。为了使观察者模式在代码中更容易实现,我们还可以尝试来写一个将普对象改造为发布者的方法,但一定记得在发布者对象那个中调用publish(message)

观察者的使用场合就是:当一个对象的改变需要同时改变其它对象,并且它不知道具体有多少对象需要改变的时候,就应该考虑使用观察者模式。

总的来说,观察者模式所做的工作就是在解耦,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。

解析:观察者对象其实是一个混合类,它负责将观察到的状态变化同时通知给关注这一变化的对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//通用代码
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);
}
}
},
// 将对象o具有观察者功能
make: function (o) {
for (var i in this) {
o[i] = this[i];
o.subscribers = [];
}
}
};

根据jQuery1.7版新增的on/off功能,我们也可以定义jQuery版的观察者:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(function ($) {
var o = $({});
$.subscribe = function () {
o.on.apply(o, arguments);
};
$.unsubscribe = function () {
o.off.apply(o, arguments);
};
$.publish = function () {
o.trigger.apply(o, arguments);
};
} (jQuery));

React状态(state)

  1. 1. 前端开发中观察者模式实践