当前位置:   article > 正文

Javascript 设计模式学习之四 Observer(观察者)模式

js 的四种 obsever

什么是Observer(观察者)模式?

观察者模式在javascript中应用的比较广泛,流行的jQuery库中的event,eventHandler就是一个典型的观察着模式:一对多的依赖关系,一个subject(目标)如果发生了改变,它的observers(观察者)会被通知,并且状态也会更新

都有哪些角色?

subject (目标) (下面例子中的Click)

主要的职责有:

1 维护观察者列表

2 实现subscribe(订阅)和unsubscribe(取消订阅)接口,就是成为subject的观察者,或从观察列表中退出

3 当自己的状态改变时,通知观察者

Objserver(观察着)(下面例子中的clickHandler)

有一个函数签名,当subject变化时调用

例子:

  1. 'use strict';
  2. // Click对象相当于Subject目标
  3. function Click() {
  4. this.handlers = []; //observers
  5. }
  6. // 观察者订阅
  7. Click.prototype.subscribe = function (fn) {
  8. this.handlers.push(fn);
  9. }
  10. // 观察者取消订阅
  11. Click.prototype.unsubscribe = function (fn) {
  12. this.handlers = this.handlers.filter((item)=>{
  13. if(item !== fn){
  14. return item;
  15. }
  16. });
  17. }
  18. // 发送通知,状态改变了
  19. Click.prototype.fire = function (o,thisObj) {
  20. let scope = thisObj;
  21. this.handlers.forEach((item)=> {
  22. item.call(scope,o);
  23. })
  24. }
  25. var log = (function() {
  26. var log = "";
  27. return {
  28. add: function(msg) { log += msg + "\n"; },
  29. show: function() { console.log(log); log = ""; }
  30. }
  31. })();
  32. function run() {
  33. // clickHandler是订阅的观察者
  34. var clickHandler = function (item) {
  35. log.add(`fired:${item}`);
  36. }
  37. var click = new Click();
  38. click.subscribe(clickHandler);
  39. click.fire('event #1');
  40. click.unsubscribe(clickHandler);
  41. click.fire('event #2');
  42. click.subscribe(clickHandler);
  43. click.fire('event #3');
  44. log.show();
  45. }
  46. run();

 

 

参考资料:http://www.dofactory.com/javascript/observer-design-pattern

转载于:https://my.oschina.net/u/2510955/blog/721903

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49833
推荐阅读
相关标签
  

闽ICP备14008679号