观察者模式 又被称为“发布-订阅”模式,目的是解决主题对象和观察者之间功能的耦合性。发布者和订阅者之间是互不干扰的,没有联系的,通过观察者,当做中介,将二者联系起来。

例子:以学生和老师之间的为例

1.首先创建观察者对象

//将观察者放在闭包中,当页面加载就立即执行
var Observer = (function () {
//防止消息队列暴露而被篡改顾将消息容器作为静态私有变量保存
var _message = {};
return {
//注册信息接口
regist: function () {},
//发布信息接口
fire: function () {},
// 移除信息接口
remove:function () {}
}
}) ()

2.创建学生类以及有关方法

//学生类
var Student = function(result) {
var that = this;
that.result = result;
// 学生回答问题动作
that.say = function() {
console.log(that.result);
}
}
//学生回答问题的方法
Student.prototype.answer = function(question) {
// console.log(this.result +''+ question + '回答问题')
//注册参数问题
Observer.regist(question, this.say)
}
// 学生睡觉 ,此时不能回答问题的方法
Student.prototype.sleep = function(question) {
console.log(this.result +''+ question + '已被注销')
//取消对老师问题的监听
Observer.remove(question, this.say)
}

3.创建教师类和有关方法

//教师类
var Teacher = function () {};
//教师提问问题的方法
Teacher.prototype.ask = function (question) {
console.log('问题是:' + question);
//发布提问消息
Observer.fire(question)
}

4.创建实体类

/模拟3位听课的学生
var student1 = new Student('学生1回答问题'),
student2 = new Student('学生2回答问题'),
student3 = new Student('学生3回答问题');

//3位学生监听(订阅)了老师提出的两个问题
student1.answer('什么是设计模式1');
student1.answer('简述观察者模式1');
student2.answer('什么是设计模式2');
student2.answer('简述设计者模式2');
student3.answer('什么是设计模式3');
student3.answer('简述观察者模式3');

//第三位同学 因为睡着了,取消了订阅的第二个问题
student3.sleep('简述观察者模式3');

//创建一个教师类
var teacher = new Teacher();
//老师 提问两个问题
teacher.ask('什么是设计模式');
teacher.ask('简述观察者模式');

js 设计模式之观察者模式的更多相关文章

  1. [JS设计模式]:观察者模式(即发布-订阅者模式)(4)

    简介 观察者模式又叫发布---订阅模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 举一个现实生活中的例子,例如小 ...

  2. js设计模式——3.观察者模式

    js设计模式——观察者模式 /*js设计模式——.观察者模式*/ // 主题,保存状态,状态变化之后触发所有观察者对象 class Subject { constructor() { this.sta ...

  3. JS设计模式之观察者模式

    观察者模式,即发布与订阅模式,实现一对多的一种关系模式,当一种对象接受信号时其他所有依赖均有行为.我们在写code的时候总是会去自定义一些事件,这就是观察者常常使用的地方: JS中的观察者模式应用: ...

  4. js设计模式-观察者模式

    定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...

  5. js 设计模式——观察者模式

    观察者模式 定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状 ...

  6. 前端笔记之JavaScript面向对象(三)初识ES6&underscore.js&EChart.js&设计模式&贪吃蛇开发

    一.ES6语法 ES6中对数组新增了几个函数:map().filter().reduce() ES5新增的forEach(). 都是一些语法糖. 1.1 forEach()遍历数组 forEach() ...

  7. JS设计模式(一)

    刚入职时,看过一段时间的设计模式,似懂非懂.不知不觉过去七个月了,对JS的理解更深刻了,数据结构与算法的基础也基本上算是过了一遍了,接下来要把设计模式搞定,然后不再深层次研究JS了,而是学习前端自动化 ...

  8. js设计模式(12)---职责链模式

    0.前言 老实讲,看设计模式真得很痛苦,一则阅读过的代码太少:二则从来或者从没意识到使用过这些东西.所以我采用了看书(<js设计模式>)和阅读博客(大叔.alloyteam.聂微东)相结合 ...

  9. JS设计模式——5.单体模式

    JS设计模式——5.单体模式 http://www.cnblogs.com/JChen666/p/3610585.html   单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? ...

随机推荐

  1. ArcMap修改粘滞移动容差防止要素在选择时无意拖动移动

    粘滞移动容差将设置一个最小像素数,鼠标指针必须在屏幕上移动了此最小距离时,所选要素才会实际发生移动. 设置粘滞移动容差的结果是延迟移动所选要素,直到指针至少移动了这段距离.此方法可用于在使用“编辑”工 ...

  2. jpa/hibernate @onetomany 使用left join 添加多条件,可以使用过滤器filters (with-clause not allowed on fetched associations; use filters异常信息)

    package com.ipinyou.mip.dataAsset.campaignManagement.entity; import com.ipinyou.mip.utils.NumberUtil ...

  3. MapReduce输出文件名更改

    默认情况下生成的文件名是part-r-00000格式,想要自定义生成输出文件名可以使用org.apache.hadoop.mapreduce.lib.output.MultipleOutputs类用来 ...

  4. android studio发布项目到github

    点击file   setting  ,打开对话框,如下,判断git是否安装成功 选择GitHub,填写github地址及密码 发布项目:

  5. sed 正则 ! 取反

    !符号表示取反,x,y!表示匹配不在x和y行号范围内的行,利用sed命令用于的阿银不在2-7之间的行 [111 sed]$ cat input [111 sed]$ sed -n '2,7!p' in ...

  6. Vue相关目录

    cli入门-项目搭建 组件 Router路由 生命周期 数据监听 cli搭建web服务介绍 vuex和axios介绍

  7. 【原创】大叔经验分享(25)hive通过外部表读写hbase数据

    在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table(key string, name string,desc string) STORED BY ' ...

  8. 【原创】大叔经验分享(43)logstash设置jdbc_default_timezone后报错

    logstash6.6.0-6.6.2版本使用jdbc input plugin时如果设置了jdbc_default_timezone,会报错: { 2012 rufus-scheduler inte ...

  9. C++入门篇三

    引用:& &放在左边就是引用,放在右边就是取地址 int main() { //引用的类型必须相同,一经引用,不可以在被引用 ; int &b = a;//b引用a之后,两个同 ...

  10. python正则表达式--特殊字符

    正则表达式—特殊表达式含义 正则表达式的字母和数字表示他们自身,但多数字母和数字前加一个反斜杠时会拥有不同的含义. 下面列出了正则表达式模式语法中的特殊元素. 1.普通字符集 1)    \w     ...