首页 > 其他 > 详细

观察者模式之数据结构

时间:2017-02-24 12:34:07      阅读:305      评论:0      收藏:0      [点我收藏+]

观察者模式

汉语描述:授人与柄,两个对象想互相操作,最简单的 就是拿到对方的柄(也可以叫引用或者指针),类似于链表结构,要点在于互相授人与柄。java可以创建接口来强约束,js可以自己写函数来实现观察者接口,嗯JS是个灵活的小胖子。

var source ={//数据源对象
  regList:[],//存放柄对象的数据结构
/**
注册列表数据结构如果是数组,只能做到全体通知执行。
如果是{{type:[注册的组件数组...]}},可以分类进行通知执行,不同的数据结构不同的玩儿法
**/
  msg:‘‘,
  isChange:false,
  reg:function(obj){
    regList.add(obj);
  },
  setMsg:function(msg){//设置改变 同时通知观察者
  isChange=true;//设置状态改变
  for(var i in regList){
    regList[i].callBack(this,msg);
  }
    isChange=false;//清除状态标记
  },
  getMsg:function(){//拉消息的方式
    return this.msg;
  }
}
var disaplay ={//显示器 可以改成prototype的方式 把通用方法写到原型上 然后把各自的show方法写到自身对象上
  source:null,
  show:function(msg){//这里写通知后的逻辑,可以抽离到各自的新观察者对象上
    alert(msg);
  },
  callBack:function(obj,msg){//约定的回调接口因为JS没有像java一样强制的interface
    show(msg);//推的方式
  },
  getChange:function(){
    if(source.change){
    var msg = source.getMsg();
  alert(‘拉过来的消息‘+msg);
  }
},
Make:function(source){//构造函数 将源对象的柄拿过来
  var obj = new watcher();
  obj.source = source;
  source.reg(this)
  return obj;
  }
}
//以上类已经构造完毕
//下面写注册调用

var disaplay1 = watcher.Make(source);
  disaplay1.show=function(msg){
  alert("有气无力的告诉你们"+msg);
  }
var disaplay2 = watcher.Make(source);
  disaplay2.show=function(msg){
  alert("郑重的告诉你们"+msg);
  }
source.setMsg(‘通知你们去食堂吃饭‘);

 


 

观察者模式之数据结构

原文:http://www.cnblogs.com/xiaolong1985/p/6437739.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!