php设计模式课程---4、观察者模式的好处是什么
php设计模式课程---4、观察者模式的好处是什么
一、总结
一句话总结:
方便选择之后去控制监听的板块数:比如选择男士之后,我可以决定监听广告里面的第二和第三板块。
1、为什么有观察者模式?
错误理解:根据不同的选择有不同的功能,比如选择男士,会有男士广告,选择女士,会有女士广告
正确理解:可以决定选择变化之后监听哪些板块,比如选择男士之后,我可以决定监听广告里面的第二和第三板块。
2、观察者模式如何实现(或者叫通知者模式更加合适)?
把监听的板块的名字放到一个数组,如果选择的对象发生变化,遍历数组更新对应的板块(执行对应板块的选择方法)。比如板块三,如果是男的,就选择汽车,是女的就选择化妆品
test3.update = function (sel) {
if(sel.value == '1') {
this.innerHTML = '大众汽车';
} else if (sel.value == '0') {
this.innerHTML = '化妆品好好好';
}
}
二、观察者模式的好处是什么
1、截图

2、代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="keyword" content="布尔教育">
<title>Document</title>
</head>
<style>
div {
width: 80%;
height: 200px;
border: 1px solid blue;
margin: 10px;
}
</style>
<body>
<select name="sel" id="sel">
<option value="0">女式风格</option>
<option value="1">男式风格</option>
</select>
<input type="button" onclick="drop();" value="不引起广告的变化了">
<br><br><br><br>
<div id="test2">新闻</div>
<div id="test3">广告</div>
</body>
<script> var sel = document.getElementById('sel');
sel.observes = [];
sel.attach = function(obj) {
this.observes[this.observes.length] = obj;
} sel.detach = function(obj) {
for(var i=0; i<this.observes.length; i+=1) {
if(this.observes[i] === obj) {
delete this.observes[i];
}
}
} sel.onchange = sel.notify = function() {
for(var i=0; i<this.observes.length; i+=1) {
this.observes[i].update(this);
}
} var test2 = document.getElementById('test2');
var test3 = document.getElementById('test3');
test2.update = function (sel) {
if(sel.value == '1') {
this.innerHTML = '足球新闻';
} else if (sel.value == '0') {
this.innerHTML = '宋明星来了';
}
} test3.update = function (sel) {
if(sel.value == '1') {
this.innerHTML = '大众汽车';
} else if (sel.value == '0') {
this.innerHTML = '化妆品好好好';
}
} sel.attach(test2);
sel.attach(test3); function drop() {
sel.detach(test3);
} </script>
</html>
没加监听者模式的选择后改变的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="keyword" content="布尔教育">
<title>Document</title>
</head>
<style>
div {
width: 80%;
height: 200px;
border: 1px solid blue;
margin: 10px;
}
</style>
<body>
<select name="sel" id="sel">
<option value="0">女式风格</option>
<option value="1">男式风格</option>
</select>
<div id="test1">1</div>
<div id="test2">新闻</div>
<div id="test3">广告</div>
</body>
<script>
var sel = document.getElementById('sel');
sel.onchange = function() {
if( this.value == '1' ) {
document.getElementById('test2').innerHTML = '足球新闻';
document.getElementById('test3').innerHTML = '大众汽车';
} else if(this.value == '0') {
document.getElementById('test2').innerHTML = '宋重鸡来华';
document.getElementById('test3').innerHTML = '化妆品';
}
}
</script>
</html>
php设计模式课程---4、观察者模式的好处是什么的更多相关文章
- php设计模式课程---1、什么是设计模式
php设计模式课程---1.什么是设计模式 一.总结 一句话总结:经典场景的经典解决方法. 经典场景的经典解决方法 1.设计模式使用的通俗场景有哪些? 比如:拍电影时,常用设计模式 感情狗血剧:误会模 ...
- 北风设计模式课程---最少知识原则(Least Knowledge Principle)
北风设计模式课程---最少知识原则(Least Knowledge Principle) 一.总结 一句话总结: 最少知识原则(Least Knowledge Principle),或者称迪米特法则( ...
- 北风设计模式课程---开放封闭原则(Open Closed Principle)
北风设计模式课程---开放封闭原则(Open Closed Principle) 一.总结 一句话总结: 抽象是开放封闭原则的关键. 1."所有的成员变量都应该设置为私有(Private)& ...
- 设计模式学习之观察者模式(Observer,行为型模式)(7)
1.观察者模式又叫做发布-订阅模式. 2.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 3 ...
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...
- Java设计模式之《观察者模式》及应用场景
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6513651.html 观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监 ...
- Java设计模式百例 - 观察者模式
观察者(Observer)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅(Publish/Subscribe ...
- php设计模式课程---6、策略模式如何使用
php设计模式课程---6.策略模式如何使用 一.总结 一句话总结:比如代码需求,做一饭店,有南北方不同菜系,不同分店有不同的饭菜汤的需求,代码怎么设计 从饭店有特色过渡到厨师有特色(南方厨师(南方饭 ...
- php设计模式课程---7、装饰器模式如何使用
php设计模式课程---7.装饰器模式如何使用 一.总结 一句话总结: 装饰器的核心是获取了文章类整个类,而不是获取了文章内容,有了这个文章类,我想给你加多少装饰就给你加多少装饰(将文章这个类封装进去 ...
随机推荐
- MapReudce源码分析之Mapper
Mapper是MapReduce编程模型中一个将输入的key/value对映射成一组中间key/value对的组件.Map是将输入记录转换成中间记录的单个任务.被转换的中间记录不需要与输入记录一样的类 ...
- JavaScript跨浏览器事件处理
var EventUtil = { getEvent: function(event){ return event ? event : window.event; }, getTarget: func ...
- Java之StringBuffer和StringBuilder的差别与联系
2.StringBuilder,StringBuffer 字符串拼接时用这两个类,效率高.节约内存.假设用字符串 "+"号拼接 性能差.而且浪费空间,产生非常多垃圾 StringB ...
- sublime使用技巧(3)-- 常用快捷键【持续更新】
♥ Ctrl + Shift + v 这样粘贴可以保持原格式,不会有缩进上的困扰 Ctrl + k 用Ctrl + d选中重复单词时跳过当前选中 Ctrl + Enter 在光标所在行的下一行新建一行 ...
- Sphinx(Coreseek)安装和使用指南
1.安装 1.1安装mmseg ./bootstrap # 必须执行,不然安装会失败 ./configure --prefix=/usr/local/mmseg- #指定安装目录 make make ...
- 使用 cacti 批量监控服务器以及其 PHP 运作环境配置
http://www.ibm.com/developerworks/cn/linux/l-cn-cacti/ http://www.360doc.com/content/12/0711/22/1465 ...
- 爬虫的原理获取html中的图片到本地
如果你想获取哪个网页的图片,如果你想知道那个网址的美女,还等什么.代码走起:下载即可使用 完成这次瞎爬的原理如下: 第一步:获取html内容 * 第二步:然后在获取的html文本中寻找图片,根据htm ...
- CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式
1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验 ...
- iframe自动全屏
<iframe src="weixin.php" id="adlistpage" name="adlistpage" framebor ...
- Linux c编程:I/O多路复用之select
一般我们在写socet程序的时候调用的accept,recv等操作都是阻塞型的.意思就是如果我们一直收不到数据那么则会被阻塞.所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待 ...