前端开发中观察者模式实践
观察者模式又叫发布订阅模式(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));
|