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、观察者模式的好处是什么的更多相关文章

  1. php设计模式课程---1、什么是设计模式

    php设计模式课程---1.什么是设计模式 一.总结 一句话总结:经典场景的经典解决方法. 经典场景的经典解决方法 1.设计模式使用的通俗场景有哪些? 比如:拍电影时,常用设计模式 感情狗血剧:误会模 ...

  2. 北风设计模式课程---最少知识原则(Least Knowledge Principle)

    北风设计模式课程---最少知识原则(Least Knowledge Principle) 一.总结 一句话总结: 最少知识原则(Least Knowledge Principle),或者称迪米特法则( ...

  3. 北风设计模式课程---开放封闭原则(Open Closed Principle)

    北风设计模式课程---开放封闭原则(Open Closed Principle) 一.总结 一句话总结: 抽象是开放封闭原则的关键. 1."所有的成员变量都应该设置为私有(Private)& ...

  4. 设计模式学习之观察者模式(Observer,行为型模式)(7)

    1.观察者模式又叫做发布-订阅模式. 2.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 3 ...

  5. 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

    设计模式 ( 十六 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...

  6. Java设计模式之《观察者模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6513651.html 观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监 ...

  7. Java设计模式百例 - 观察者模式

    观察者(Observer)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅(Publish/Subscribe ...

  8. php设计模式课程---6、策略模式如何使用

    php设计模式课程---6.策略模式如何使用 一.总结 一句话总结:比如代码需求,做一饭店,有南北方不同菜系,不同分店有不同的饭菜汤的需求,代码怎么设计 从饭店有特色过渡到厨师有特色(南方厨师(南方饭 ...

  9. php设计模式课程---7、装饰器模式如何使用

    php设计模式课程---7.装饰器模式如何使用 一.总结 一句话总结: 装饰器的核心是获取了文章类整个类,而不是获取了文章内容,有了这个文章类,我想给你加多少装饰就给你加多少装饰(将文章这个类封装进去 ...

随机推荐

  1. iOS swift NSClassFromString将字符串转换成类名

    在oc中将字符串转换成类名直接调用NSClassFromString("classname")即可,但是到了swift中变的麻烦多了 swift中如果要将字符串转换为类型需要以下几 ...

  2. df 命令

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...

  3. 《机器学习实战》——k-近邻算法Python实现问题记录(转载)

    py2.7 : <机器学习实战> k-近邻算法 11.19 更新完毕 原文链接 <机器学习实战>第二章k-近邻算法,自己实现时遇到的问题,以及解决方法.做个记录. 1.写一个k ...

  4. MongoDBTemplate多条件查询的问题

    问题: 在使用Spring Data MongoDB 进行条件查询数据时,发现条件判断不起作用,结果会返回所有的数据. Criteria criteria = new Criteria(); crit ...

  5. 驱动程序分层分离概念_总线驱动设备模型_P

    分层概念: 驱动程序向上注册的原理: 比如:输入子程序一个input.c作为一层,下层为Dev.c和Dir.c,分别编写Dev.c和Dir.c向上Input.c注册:如图所示 分离概念: 分离概念主要 ...

  6. Solr6.5创建core

    首先在solrhome(solrhome的路径和配置见中solr的web.xml)http://www.cnblogs.com/paulversion/p/6827949.html 中创建mycore ...

  7. 【原创】Hibernate自动生成(1)

    本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正. 开发环境: Eclipse Version: Photon ...

  8. [SCOI2009]生日礼物(尺取法)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2201  Solved: 1186[Submit][Status][Discuss] Descript ...

  9. python解释器安装教程

    1. 首先,打开python的官网:python.org 2. 首页downloads下打开, 3. 最上边是两个最新的版本,长期计划,推荐使用python3,如果长期打算用p3,默认使用最新版本.如 ...

  10. Sql注入_类型

    1.sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 2.sql注入类型 按照注入点类型来分类 (1)数字型注入点 在 Web ...