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 相关文章推荐
jquery实现的一个简单进度条效果实例
May 12 Javascript
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
js限制文本框只能输入中文的方法
Aug 11 Javascript
javascript中的正则表达式使用详解
Aug 30 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
Nov 02 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
Sep 05 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
Vue中常用rules校验规则(实例代码)
Nov 14 Javascript
vue实现放大镜效果
Sep 17 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
php foreach正序倒序输出示例代码
2014/07/01 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
JS解密入门 最终变量劫持
2008/06/25 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
老生常谈javascript中逻辑运算符&&和||的返回值问题
2017/04/13 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
python的dict,set,list,tuple应用详解
2014/07/24 Python
python logging类库使用例子
2014/11/22 Python
Python Socket编程详细介绍
2017/03/23 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
网络工程专业毕业生推荐信
2013/10/28 职场文书
经典大学生求职信范文
2014/01/06 职场文书
食品安全责任书
2014/04/15 职场文书
教研处工作方案
2014/05/26 职场文书
五水共治一句话承诺
2014/05/30 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
技术入股合作协议书
2016/03/21 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript