JS设计模式之观察者模式实现实时改变页面中金额数的方法


Posted in Javascript onFebruary 05, 2018

本文实例讲述了JS设计模式之观察者模式实现实时改变页面中金额数的方法。分享给大家供大家参考,具体如下:

观察者设计模式概念:

有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者(每个处的主账号金额函数)对象同时监听某一个主题对象(修改子账号金额后调用的deliver的对象Publisher)。这个主题对象在状态(调用deliver方法)发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

在一个会员管理系统中,主账号给子账号充值金额的功能。

场景:主账号有10000元,如果给子账号充值增加1000元,那么主账号的金额应该相对应报减少1000元显示9000元;

页面上有多种处需要实时改变的位置,怎么办?

JS设计模式之观察者模式实现实时改变页面中金额数的方法

在上图中有三处总余额要显示;

通过子加减按钮来调整账号余额的话,这三处的总余额也需要相对改变;

第一种方式:在一个函数中加添加多个元素对象,这样可以是一个门面模式,来简化调用重复的代码;

function modifyPrice(price) {
 $("#a1").html(price);
 $("#a2").html(price);
 $("#a3").html(price);
 $("#a4").html(price);
}

第二种方式:用观察者设计模式,如果状态改变了和它相关的依赖也会随之变化;

// 订阅者
function a1( price ) {
 console.log( price );
 $("#a1").html(price);
}
// 订阅者
function a2( price ) {
 console.log( price );
 $("#a2").html(price);
}
// 订阅者
function a3( price ) {
 console.log( price );
 $("#a3").html(price);
}
// 订阅者
function a4( price ) {
 console.log( price );
 $("#a4").html(price);
}
// 发布者
function PublisherPrice() {
 this.subscribers = [];
 this.addSubscriber = function( subscriber) {
  // some 如果返回true说明this.subscriber数姐中已经有了相同的订阅者了,当遇到第一个比较值是true就返回true,如果没有遇到true最后返回一个false;
  var isExsit = this.subscribers.some(function( el ){
   return el == subscriber
  });
  if ( !isExsit ) {
   this.subscribers.push( subscriber );
  }
  return this;
 }
 this.deliver = function(
  // forEach 相当于是for循环
  this.subscribers.forEach(function( fn ) {
   fn(price);
  });
  return this;
 }
}

客户端调用

var publisherPrice = new PublisherPrice();
publisherPrice.addSubscriber(a1);
publisherPrice.addSubscriber(a2);
publisherPrice.addSubscriber(a3);
publisherPrice.addSubscriber(a4);
publisherPrice.deliver("¥200.00");

第二种有什么优点?

1、每一个订阅者都是相互独立的只和发布者有关系,与发布者是一对多的关系,也可以是一对一的关系。
2、每一个订阅者可以根据自己的需求来调用,而不影响其它订阅者
3、与第一种方式相比,第二种方式的代码可读性、可维护性强;

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Web层改进II-用xmlhttp 无声息提交复杂表单
Jan 22 Javascript
JavaScript Sort 表格排序
Oct 31 Javascript
js前台判断开始时间是否小于结束时间
Feb 23 Javascript
jquery写个checkbox——类似邮箱全选功能
Mar 19 Javascript
JavaScript实现Flash炫光波动特效
May 14 Javascript
深入理解JQuery循环绑定事件
Jun 02 Javascript
模仿password输入框的实现代码
Jun 07 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
原生js和css实现图片轮播效果
Feb 07 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
Aug 18 Javascript
JS 事件机制完整示例分析
Jan 15 Javascript
JS中Map和ForEach的区别
Feb 05 #Javascript
完美解决axios跨域请求出错的问题
Feb 05 #Javascript
vue 页面加载进度条组件实例
Feb 05 #Javascript
JS设计模式之状态模式概念与用法分析
Feb 05 #Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 #Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 #Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 #Javascript
You might like
亲密接触PHP之PHP语法学习笔记1
2006/12/17 PHP
php mssql 时间格式问题
2009/01/13 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
浅谈js中的bind
2019/03/18 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
python动态加载包的方法小结
2016/04/18 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
python logging.info在终端没输出的解决
2020/05/12 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
程序员岗位职责
2013/11/11 职场文书
亲属关系公证书
2014/04/08 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
医药营销个人求职信
2014/04/12 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
学习十八大的心得体会
2014/09/01 职场文书
送达通知书
2015/04/25 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS