二.观察者模式off方法

<script>// 观察者模式的off方法//   在已经添加到消息盒子中的类型以及方法中,删除方法//   如果有这个类型,有这个方法,再执行删除操作,如果没有,不做任何操作class Observer{constructor(){this.msg = {};}on(type,fun){if(this.msg[type] === undefined){this.msg[type] = [fun] ; }else{this.msg[type].push(fun);}}emit(){}off(type,fun){// 如果类型方法存在,再执行删除方法,如果类型方法不存在,不执行任何操作// 如果类型不存在if( this.msg[type] === undefined ){// 执行return,终止程序执行,不做任何操作return;}// 从类型中,查找函数方法,从数组中删除this.msg[type].forEach((item,key)=>{// 存储的函数,与输入的要删除的函数相同if(item === fun){// 从当前单元的索引开始,删除一个单元this.msg[type].splice(key , 1);// 防止数组坍塌// 数组只要做删除操作,就要有i--// i--;// 如果是for循环,就要写i--}})}}const observer = new Observer();// 第一次新增打电话类型,是新增类型,并且赋值一个数组,存储函数observer.on('打电话' , da1);// 打电话,类型已经存在,直接向数组中新增函数就可以了observer.on('打电话' , da2);// 写检查observer.on('写检查' , jian1);observer.on('写检查' , jian2);observer.on('写检查' , jian3);// 没收手机observer.on('没收手机' , mo1);observer.on('没收手机' , mo2);observer.on('没收手机' , mo3);// 删除事件observer.off('没收手机' , mo1);observer.off('没收手机' , mo2);console.log(observer);function da1(){console.log('请老爸,下午2点来学校');}function da2(){console.log('请老妈,下午3点来学校');}function jian1(){console.log('给班主任写1000字的检查');}function jian2(){console.log('给教导主任写2000字的检查');}function jian3(){console.log('给校长写3000字的检查');}function mo1(){console.log('没收手机1天');}function mo2(){console.log('没收手机1年');}function mo3(){console.log('没收手机1辈子');}</script>

6 观察者模式off方法相关推荐

  1. java 自带观察者模式_java 内置的观察者模式

    1.可观察的对象 public class PurchaseDate extends Observable { private int Id; private String orderNumber; ...

  2. java设计模式(六)--观察者模式

    转载:设计模式(中文-文字版) 目录: 简单目标任务实现 观察者模式介绍 观察者模式代码实现 观察者模式是JDK中使用最多的模式之一,非常有用.我们也会一并介绍一对多关系,以及松耦合(对,没错,我们说 ...

  3. php 观察者模式怎么用,php怎么实现观察者模式

    php实现观察者模式的方法:首先创建一个PHP示例文件:然后实现观察者向主题注册:最后对注册树进行遍历,让每个对象实现其接口提供的操作即可. 本文操作环境:windows7系统.PHP7.1版,DEL ...

  4. java observer update_Java_观察者模式(Observable和Observer) -转

    一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了观察者模式.一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时 ...

  5. 设计模式之:解剖观察者模式【z】

    论坛上很多人都讲设计模式,也讲了很多设计模式,现在也来说说我对一些设计模式的理解,对于一些简单的模式就不多说了,一切都在我以前写的例子中使用到了,比如说在velocity和freemarker的比较那 ...

  6. Java进阶 | 从整体上观察面向对象

    一.面向对象 面向对象是Java编程中最核心的思想,基本特征:继承.封装.多态. 1.特征之封装 将结构.数据.操作封装在对象实体中,使用时可以不关注对象内部结构,只能访问开放权限的功能入口,从而降低 ...

  7. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  8. [课业] 18 | 软工 | 软件体系结构基础

    文章目录 软件体系结构的发展 软件架构发展历史 软件架构的重要性 理解软件体系结构 概念和定义 区分物理和逻辑 高层抽象 概述 部件 连接件 配置 高层抽象的好处 体系结构风格初步 主程序.子程序风格 ...

  9. 《Head First设计模式》读书笔记

    目录 一.设计模式入门与策略模式 二.观察者模式 三.装饰者模式 四.工厂模式 五.单件模式 六.命令模式 七.适配器与外观模式 八.模板方法模式 九.迭代器与组合模式 十.状态模式 十一.代理模式 ...

  10. [iOS] 图文讲解原生二维码有效扫描区域 rectOfInterest

    在使用原生的 AVFoundation 框架实现二维码扫描的时候, 需要注意一下两个方面: 启动相机的卡顿问题; 有效扫描区域的问题; 本文主要针对这两个问题进行讲解. 1. 启动扫描卡顿 在Push ...

最新文章

  1. [FLASH_AS]Flash as3 addEventListener事件监听传递参数
  2. 1月28日昆山杜克大学和西交利物浦大学太仓校区参观有感
  3. 联想拯救者Y7000P 2021H deepin v20.2.4设置双屏显示:切记要用集显,NAVIDA独显不生效
  4. Eclipse的基本设置
  5. android jdk环境的配置
  6. (03)System Verilog 通用总线激励驱动方法
  7. ssm 新建拦截器_拦截器在springboot项目和ssm架构项目的应用
  8. 在VC中使用Delphi构造公共对话框
  9. SpringBoot+Dubbo实战demo
  10. 【CV】如何使用Tensorflow提供的Object Detection API--3--手工标注数据
  11. 抖音在线无水印解析PHP源码
  12. Mac 隔空投送 AirDrop 搜不到 iPhone
  13. 零售3.0时代,国民品牌都市丽人一次成功的变革
  14. 【hadoop生态之ZooKeeper】第一章Zookeeper概述【笔记+代码】
  15. 如何使用 JAVA 开发微信登录教程
  16. iOS集成Cordova开发教程遇到的问题
  17. JQuery中的each()方法和$.each()函数的使用
  18. 何为非侵入式负荷识别-负荷辨识
  19. Excel设置下拉选项的方法
  20. SS00007.algorithm——|ArithmeticMachine.v07|——|Machine:监督学习算法.v06|

热门文章

  1. win10装debian 双系统_如何安装win10和linux [ubuntu14]双系统
  2. 代码审计jizhiCMS 后台getshell
  3. java解析project mpp文件_Java解析Project mpp文件
  4. 计算机休眠唤醒原理,电脑休眠和睡眠区别以及怎么唤醒
  5. 无线局域网和蜂窝移动网络_为什么 iPhone 的数据流量叫做「蜂窝移动网络」?...
  6. GridLayout 介绍 (转载自http://www.cnblogs.com/skywang12345/p/3154150.html)
  7. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
  8. OpenCV 对比度增强
  9. 多个excel表合并成一个excel表
  10. 微信公众平台开发(十二) 发送客服消息