js实现观察者模式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>面向对象之观察者模式</title>
</head>
<style type="text/css">
.word{
width:500px;
height: 150px;
border:1px solid #333;
margin-top:20px;
} </style>
<body>
<h1>用观察者模式来切换</h1>
<select name="" id="">
<option value="default">默认风格</option>
<option value="male">男士风格</option>
<option value="female">女士风格</option>
</select>
<input type="button" name="" value="观察动作栏" onclick="t1();">
<input type="button" name="" value="不观察动作栏" onclick="t2();">
<div class="word" id="content">内容</div>
<div class="word" id="ad">广告</div>
<div class="word" id="study">动作</div>
</body>
<script type="text/javascript">
var sel =document.getElementsByTagName('select')[0];
sel.observers={};
sel.attach=function(key,obj){
this.observers[key]=obj;
}
sel.detach=function(key){
delete this.observers[key];
}
//追踪监听
sel.onchange=sel.notify=function(){
for(var key in this.observers){
this.observers[key].update(this);
}
}
//客户端
var content= document.getElementById('content');
content.update=function(observee){
if(observee.value=='male'){
this.style.backgroundColor='gray';
}else if(observee.value=='female'){
this.style.backgroundColor='pink';
}
}
var ad= document.getElementById('ad');
ad.update=function(observee){
if(observee.value=='male'){
this.innerHTML='汽车';
}else if(observee.value=='female'){
this.innerHTML='化妆品';
}
}
//让content观察select的变化
sel.attach('content',content);
sel.attach('ad',ad);
//耦合度低
var study=document.getElementById('study');
study.update=function(observee){
if(observee.value=='male'){
this.innerHTML='学习计算机';
}else if(observee.value=='female'){
this.innerHTML='学习美容';
}
}
sel.attach('study',study); function t1(){
sel.attach('study',study);
}
function t2(){
sel.detach('study');
} </script>
</html>
js实现观察者模式的更多相关文章
- js设计模式-观察者模式
定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...
- 谈谈JS的观察者模式(自定义事件)
呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象 ...
- JS设计模式——观察者模式(通俗易懂)
Observer模式的概念 Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态. Observer模式提供给关联对象一种同步通信的手段 ...
- js 设计模式——观察者模式
观察者模式 定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状 ...
- js 之观察者模式
观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自 ...
- 我理解的 js 的观察者模式 Observable
我第一次看 四人帮 写的<设计模式>时一头雾水,现在也是,或许其是针对专业的程序员学习使用的. 通过对Ext / Backbone 源码的学习,可总结如下: 模式 - 就是对解决某一类特定 ...
- js的观察者模式
观察者模式(发布-订阅模式):它定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.由主体和观察者组成,主体负责发布事件,同时观察者通过订阅这些事件来观察该主体 ...
- js之观察者模式
观察者模式: 大体上是, 1.松耦合的代码: 2.一对多的关系: 3.主体状态变化时,所有依赖被通知: 4.主体和观察者互不知晓. 基本上,满足上面四点的,就可以算是观察者模式了.来看一个demo, ...
- js实现观察者模式风格替换
如下图,我们看到两种风格:在选择男士时,页面颜色为黑色:在选择女士时,页面颜色为粉红色. 主要可以分为两类: 下拉框 ---> 被观察者 div ---> 观察者 面向过程实现风格替换: ...
随机推荐
- 1117Mysql prepare预处理语句
转自http://www.jb51.net/article/81378.htm 综述:一般用来拼凑SQL然后执行 MySQL 5.1对服务器一方的预制语句提供支持.如果您使用合适的客户端编程界面,则这 ...
- OKhttp初步
OkHttp 使用方法:1.分为同步和异步.同步:1.getRequest request = new Request.Builder().url(utl).build();Response resp ...
- Ubuntu下基于Nginx实现Tomcat集群负载均衡
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Nginx是一款HTTP和反向代理服务器,有关它的介绍可以到网上搜一下,很多很多,不再累述.这里,我们记录一下Nginx ...
- Chrome开发工具Elements面板(编辑DOM和CSS样式)详解
Element 译为“元素”,Element 面板可以让我们动态查看和编辑DOM节点和CSS样式表,并且立即生效,避免了频繁切换浏览器和编辑器的麻烦. 我们可以使用Element面板来查看源代码,它不 ...
- ScrollView内部元素如何做到fill_parent 或者 match_parent?
转 : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0704/1629.html ScrollView滚动视图是指当拥有很多 ...
- 网络流 HDU 3605
建图 源点 -> 1024类人 -> 星球 -> 汇点 权 每类人数目 星球容量 星球容量 列举 0~1 ...
- 简单的cookie使用
<html><head><script type="text/javascript">function getCookie(c_name){if ...
- tableView异步下载图片/SDWebImage图片缓存原理
问题说明:假设tableView的每个cell上的imageView的image都是从网络上获取的数据.如何解决图片延迟加载(显示很慢).程序卡顿.图片错误显示.图片跳动的问题. 需要解决的问题: 1 ...
- asp.net mvc 缓存
webConfig 里面配置缓存时间 <caching> <outputCacheSettings> <outputCacheProfiles> <add n ...
- 【BZOJ-3675】序列分割 DP + 斜率优化
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1420 Solved: 583[Submit][Statu ...