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/ 最终输出结果格 ...
随机推荐
- 使用Android Studio和Genymotion模拟器搭建Andriod开发环境
一.Android Studio下载 1.打开http://www.android.com/ 2.依照下图步骤打开下载页面 a.在页脚部分点击“App Developer Resources” b.点 ...
- DS实验题 Floyd最短路径 & Prim最小生成树
题目: 提示: Floyd最短路径算法实现(未测试): // // main.cpp // Alg_Floyd_playgame // // Created by wasdns on 16/11/19 ...
- 关于在TP的各类标签中的注意事项
name的位置上的变量是不用加$的 value位置上的变量是要加$的 <eq name="volist.id" value="$Think.post.id" ...
- php安装json模块
centOS上因为看php源码中没有json模块,于是采用pecl自动编译安装:# yum install php-devel# yum install php-pear# yum install g ...
- shell 中的引用
1. 什么叫引用对 shell 脚本.程序.终端命令.变量.字符串等结果的反馈.2. 引用的类型 " " 双引号 ` 反引号' ' 单引号 ...
- zabbix 2.2.2在centos 6.3 x86_64上的安装
zabbix 2.2.2在centos 6.3 x86_64上的安装 更新五月 03, 2014 # 依赖环境 yum install -y php-mbstring mysql-deve ...
- 医生加号页改版,就一个Bug, 看医生工作台一期需求
8/8日报 分级埋点: [MobClick event:UmengPagePlusDoctor attributes:@{@"page":@"plusPage&q ...
- C++ builder的文件操作
在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1.基于C的文件操作:2.基于C++的文件操作:3.基 ...
- Comparable与Comparator
转载 Comparable与Comparator的区别 (转载) Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部 ...
- membership 在web.config中配置信息
<?xml version="1.0" encoding="utf-8"?><configuration> <configSect ...