设计模式学习_javascript_观察者模式
来源:互联网 发布:网络金融诈骗判多少年 编辑:程序博客网 时间:2024/06/15 23:21
什么是观察者模式
观察者模式,用于一和多之间,一改变的时候通知多进行相应的变化。现在我们通过一个栗子来看一下观察者模式是怎样的。
下面这个demo要是实现的效果就是通过ADD按钮添加CheckBox显示在下面的灰色div中,然后上面的CheckBox选择的时候下面的CheckBox进行相应的操作。可能项目不是很完整,基本上看一个思想就好。
下面来分析 一下
这里当最上面的CheckBox选中的时候就会通知观察者们,他们进行相应的处理,是选中还是不选中还是其他操作。下面看一下代码。
var ObserverPattern =( function (){ //这是被观察者,它内部有一个ObserVerList数组用来存储观察者,还有一个方法用来移除观察者,最后有一个notify去通知观察者进行相应的操作。 var Subject = function(){ var ObserVerList=[]; this.pushObserver = function(observer){ ObserVerList.push(observer); return true; }; this.removeObserver = function(index){ if(index>=pushObserver.length||index<0) return false; ObserVerList.splice(index,1); return true; }; this.notify = function(context){ //通知所有的观察者 ObserVerList.forEach(function(item){ console.log("context"+context); item.update(context); }); return true; }; }; //这是观察者,可以看成一个接口,update由观察者自己定义 var Observer= function(){ this.update= null; }; //继承 var extend =function(obj,extension){ for(item in obj) extension[item] =obj[item]; }; return { Subject:Subject, Observer:Observer, extend:extend } })();
下面看一下具体的观察模式:
window.onload=function(){ var checkAll=document.getElementById("checkAll"); var addBtn=document.getElementById("addBtn"); var showCheck=document.getElementById("showCheck"); ObserverPattern.extend(new ObserverPattern.Subject(),checkAll); var i=0;//当做CheckBox的下标 addBtn.onclick=function(){ i++; var chk=document.createElement("input"); var brLine=document.createElement("br"); chk.type="checkbox"; showCheck.appendChild(chk); showCheck.appendChild(brLine); ObserverPattern.extend(new ObserverPattern.Observer(),chk); //添加到观察者列表 checkAll.pushObserver(chk); chk.update=(function(i){ var checkChoose = function(context){ this.checked=context; } var checkUnChoose = function(context){ this.checked=!context; } return (i%2==0)?checkChoose:checkUnChoose; })(i); } checkAll.onclick = function(){ if(i>0){ checkAll.notify(this.checked); }else{ this.checked=false; alert("add button first"); } };};
在window.onload的时候,先获取对应的控件对象,然后通过ObserverPattern.extend将checkAll这个CheckBox变成被观察者。接着监听ADD按钮的点击事件,去创建CheckBox然后添加到下面的DIV中。同时通过ObserverPattern.extend讲他们变成观察者。现在在checkAll的点击事件中去调用他的notify方法,通知观察他的所有观察者进行update。至此完成观察者模式。
阅读全文
0 0
- 设计模式学习_javascript_观察者模式
- 设计模式学习_javascript_单例模式
- 设计模式学习--观察者模式
- 设计模式学习----观察者模式
- 设计模式学习-----观察者模式
- 设计模式学习--观察者模式
- 设计模式学习:观察者模式
- 观察者设计模式--学习笔记
- [boolan]设计模式 观察者学习
- 学习的设计模式------观察者模式
- 学习笔记 ---- 设计模式之观察者模式
- 设计模式入门学习 观察者模式
- 设计模式之观察者模式学习笔记
- 设计模式之观察者模式学习
- js 设计模式学习--观察者模式
- 学习设计模式--观察者模式(C++)
- 设计模式学习笔记之观察者模式
- 设计模式学习之观察者模式
- 基于注解的Spring AOP的配置和使用--转载
- Android Studio 快捷键,配置自定义键映射
- 面向对象设计原则概述
- Bootstrap Table使用整理(二)
- Add zip into GIT Bash on Windows
- 设计模式学习_javascript_观察者模式
- 链表分割
- 欢迎使用CSDN-markdown编辑器
- 人脸属性预测之书山有路
- 小白谈谈对JS原型链的理解
- hibernate查询
- 关于studio中的Run/Debug Configurations不能运行的问题及解决方案
- 欢迎使用CSDN-markdown编辑器
- 每日学习巩固知识,下班回顾总结