定义一种一对多的从属关系,当一个目标状态改变,所有他的从属对对象都将收到通知。

1.简单的Observer模式 实现

var Observer = function(){
this.list = [];
}
Observer.prototype.sub = function(func){
this.list.push(func);
}
Observer.prototype.pub = function(msg){
for(var i = 0; i<this.list.length; i ++){
this.list[i](msg)
}
}
Observer.prototype.unsub = function(func){
var index = this.list.indexOf(func);
this.list.splice(index,1);
}
var ob = new Observer();
function func(msg){
console.log(msg)
}
ob.sub(func);
ob.pub("Hello");
ob.unsub(func);
ob.pub("useless");

2.观察者模式应用

在一个电子商务系统中,假设目前有三个类,分别是订单类,信息类,和检查类。在购买中,当下单之后要进行商品的检查,和商品信息发送。

一般的做法是在订单类的下单完成函数里去构建其消息和检查类并调用其方法,这是一种耦合。

而通过观察者模式,我们可以使用一个类去管理这些方法,当订单类状态发生改变时,其所有观察者都将收到通知,这里的观察者是其他类的函数,函数调用。

//观察者模式实现的功能类
var Observer = function(){
this.list = [];
}
Observer.prototype.sub = function(func){
  // 主
this.list.push(func);
}
Observer.prototype.pub = function(msg){
for(var i = 0; i<this.list.length; i ++){
this.list[i](msg)
}
}
Observer.prototype.unsub = function(func){
var index = this.list.indexOf(func);
this.list.splice(index,1);
}
var ob = new Observer(); //商品类
function Order(goods){
this.goods = goods;
}
Order.prototype.done = function(){
ob.pub(this.goods);
} // 消息类
function Msg(){
  // 从
ob.sub(this.sendMsg);
}
Msg.prototype.sendMsg = function(goods){
alert(goods.name);
} // 检查类
function Check(){
  //从
ob.sub(this.check);
}
Check.prototype.check = function(goods){
alert(goods.name != 0);
}
var order1 = new Order({'name':'耳机'});
var msg1 = new Msg();
var check1 = new Check();
order1.done()

最新文章

  1. Hibernate 3.3.2 文档翻译 Day01
  2. 用world写blog
  3. 在source insight中集成astyle
  4. noi 9267 核电站
  5. 解决ScrollView嵌套ViewPager出现的滑动冲突问题
  6. 以Server模式启动Derby服务竟然抛套接字权限异常
  7. 【Leetcode】 - Divide Two Integers 位运算实现整数除法
  8. Linux串口调试
  9. HTML5新特性学习-2
  10. CSS样式表基础知识、样式表的分类及选择器
  11. swift UITextView内容距离边框边距设置
  12. How to generate file name according to datetime in bat command
  13. Vue Router 路由实现原理
  14. volatile 线程内存模型
  15. Easyui datagrid 去掉表头的checkbox复选框
  16. delphi注册热键方法(一)
  17. DDLog设置方法
  18. Charles应用指南--安装与代理篇
  19. java concurrent之ReentrantLock
  20. java基础----&gt;Java中枚举的使用(一)

热门文章

  1. .Net语言中关于AOP 的实现详解
  2. 力挺8天入门wpf【转载】
  3. asp.net关于Repeater控件中的全选,批量操作
  4. cover letter issues
  5. [Effective Modern C++] Item 4. Know how to view deduced types - 知道如何看待推断出的类型
  6. volatile 和const 变量的使用
  7. Canvas的补充
  8. Ice_cream&#39;s world I--hdu2120
  9. DNA Sorting--hdu1379
  10. ZigBee 协议规范