javascript设计模式学习之十四——中介者模式
一、中介者模式的定义和应用场景
中介者模式的作用在于解除对象之间的紧耦合关系,增加一个中介者之后,所有对象都通过中介者来通信,而不是互相引用,当一个对象发生变化的时候,仅需要通知中介者即可。从而将网状的多对多关系转换为了简单的一对多关系。
中介者模式使得各个对象之间得以解耦,以中介者和对象之间一对多的关系取代了多个对象之间多对多的关系,其缺点在于将对象之间的复杂性转移到了中介者对象的复杂性,系统增加的这个中介者对象往往是复杂和难以维护的,往往当对象之间的耦合度呈指数增长的时候,就需要考虑引入中介者模式。
二、中介者模式应用案例
假设正在编写一个手机购买页面,购买路程中,用户可以选择手机颜色及手机内存大小,同时页面有两个展示区域,分别显示用户选择好的颜色,内存大小,输入数量。还有一个按钮提示下一步的操作,如果操作不对则提示对应的提示信息,否则显示加入购物车。
页面的元素有多个,每一个元素的变化都会对按钮的行为产生影响,使用中介者模式实现代码如下:
var stocks={
'red|16G':,
'red|32G':,
'blue|16G':,
'blue|32G':
};
var colorSelect=document.getElementById('colorSelect');
var memorySelect=document.getElementById('memorySelect');
var numInput=document.getElementById('numInput');
var colorInfo=document.getElementById('colorInfo');
var memoryInfo=document.getElementById('memoryInfo');
var numInfo=document.getElementById('numInfo');
var btn=document.getElementById('btn');
var mediator=(function(){
return {
change:function(obj){
var color=colorSelect.value;
var memory=memorySelect.value;
//console.log(numInput.value);
var num=parseInt(numInput.value,);
//console.log(num);
//ݫעʺהгքѾʭԫ֝ٸאީ֟ìʹփאީ֟ࠉӔʶҰע̍֟
if(obj===colorSelect){
colorInfo.innerHTML=color;
}else if(obj==memorySelect){
memoryInfo.innerHTML=memory;
}else if(obj===numInput){
numInfo.innerHTML=num;
}
if(!color){
btn.disabled=true;
btn.innerHTML='请选择颜色';
return;
}
if(!memory){
btn.disabled=true;
btn.innerHTML='请选择内存大小';
return;
}
var stock=stocks[color+'|'+memory];
// console.log(stock);
if(num>stock){
console.log('num>stock');
btn.disabled=true;
btn.innerHMTL='库存不足';
return;
}
btn.disabled=false;
btn.innerHTML='加入购物车';
}
};
})();
colorSelect.onchange=function(){
mediator.change(this);
};
memorySelect.onchange=function(){
mediator.change(this);
};
numInput.oninput=function(){
mediator.change(this);
};
javascript设计模式学习之十四——中介者模式的更多相关文章
- javascript设计模式学习之十五——装饰者模式
一.装饰者模式定义 装饰者模式可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象.这种为对象动态添加职责的方式就称为装饰者模式.装饰者对象和它所装饰的对象拥有一致的接口,对于用 ...
- javascript设计模式学习之十二——享元模式
一.享元模式的定义及使用场景 享元模式是为了解决性能问题而诞生的设计模式,这和大部分设计模式为了提高程序复用性的原因不太一样,如果系统中因为创建了大量类似对象而导致内存占用过高,享元模式就非常有用了. ...
- Java 设计模式系列(十四)命令模式(Command)
Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...
- C#设计模式学习笔记:(17)中介者模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7966240.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第五个模式--中 ...
- javascript基础学习(十四)
javascript之表单对象 学习要点: 表单对象 文本框 按钮 单选框和复选框 一.表单对象 在HTML文档中可能会出现多个表单,也就是说,一个HTML文档中可能出现多个<form>标 ...
- javascript设计模式学习之十六——状态模式
一.状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变. 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态.但在状态模 ...
- javascript设计模式学习之十——组合模式
一.组合模式定义及使用场景 组合模式将对象组合成树形结构,用以表示“部分—整体”的层次结构,除了用来表示树形结构之外,组合模式还可以利用对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性. ...
- Java设计模式之(十四)——策略模式
1.什么是策略模式? Define a family of algorithms, encapsulate each one, and make them interchangeable. Strat ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
随机推荐
- UVA 796 Critical Links(Tarjan求桥)
题目是PDF就没截图了 这题似乎没有重边,若有重边的话这两点任意一条边都不是桥,跟求割点类似的原理 代码: #include <stdio.h> #include <bits/std ...
- [ZZ] Shadow Map
Shadow Map 如何能够高效的产生更接近真实的阴影一直是视频游戏的一个很有挑战的工作,本文介绍目前所为人熟知的两种阴影技术之一的ShadowMap(阴影图)技术. ShadowMap技术 ...
- ICON文件保存
这两天想做一下windows系统下图标的修改,让程序有更新的时候能够更新图标的外观,达到提醒的作用,360,QQ经常采用这种方式进行更新的提示,也有采用弹框的方式来提示,用新版QVOD的同事可能见到过 ...
- How to Write a Spelling Corrector
http://norvig.com/spell-correct.html Feb 2007to August 2016 How to Write a Spelling Corrector One we ...
- jdk1.7
http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-windows-i586.exe?AuthParam=1450748157_ ...
- ubuntu12.04 安装 php5.4/php5.5
1:修改源(我使用163的源)直接修改/etc/apt/sources.list deb http://mirrors.163.com/ubuntu/ precise main universe re ...
- URL编码数据转换为JSON数据
NSString *urlString; urlString=[self URLDecodedString:urlString]; -(NSString *)URLDecodedString:( ...
- 管子&小白
管夷吾已入朝,稽首谢罪,桓公亲手扶起,赐之以坐.夷吾曰:“臣乃俘戮之余,得蒙宥死,实为万幸,敢辱过礼!”桓公曰:“寡人有问于子,子必坐,然后敢请."夷吾再拜就坐. 桓公曰:“齐,千乘之国,先 ...
- copy构造函数的秘密
1.先来看这段代码: MyString::MyString(){ this->mstr = NULL;} MyString::MyString(MyString &str){ //用一个 ...
- Spring冲刺阶段二(1)
我们首先是根据同学们的评价来找补自己的不足之处,其中同学们反应最多的是我们的界面不够好看,但是我觉得虽然不好看但算是比较简洁.其次是没有体现内网在其中发挥的作用,这点我们还没有实现. 根据这些不足之处 ...