JS设计模式之命令模式概念与用法分析


Posted in Javascript onFebruary 06, 2018

本文实例讲述了JS设计模式之命令模式概念与用法。分享给大家供大家参考,具体如下:

客户创建命令;调用者执行该命令;接收者在命令执行时执行相应操作
简单命令对象一般用来消除二个对象(调用者和接收者)之间的耦合,而复杂的命令对象则一般用来封装不可分的或事务性的指令。

命令模式的主要用途是把调用对象(用户界面、API和代理等)与实现操作的对象隔离开。凡是两个对象间互动方式需要有更高的模块化程度时都可以用到这种模式。

命令的意思是用一个简单方法或函数去执行和这个命令相关的实际操作。就如同用遥控器打开电视一样,只按一个按键就可以打开电视,简单、方便。它具体的实现操作我们不用关心。那是有电视器来处理的。电视对遥控器提供了一个接口(信号),遥控器只需要在点击时实现这个接口就可以了。

JS设计模式之命令模式概念与用法分析

Command:
定义命令的接口,声明执行的方法。
ConcreteCommand:
命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
Receiver:
接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
Invoker:
要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。
Client:
创建具体的命令对象,并且设置命令对象的接收者。注意这个不是我们常规意义上的客户端,而是在组装命令对象和接收者,或许,把这个Client称为装配者会更好理解,因为真正使用命令的客户端是从Invoker来触发执行

模式分析

1.命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。
2.每一个命令都是一个操作:请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作。
3.命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。
4.命令模式使请求本身成为一个对象,这个对象和其他对象一样可以被存储和传递。
5.命令模式的关键在于引入了抽象命令接口,且发送者针对抽象命令接口编程,只有实现了抽象命令接口的具体命令才能与接收者相关联。

模式优点

1.降低对象之间的耦合度。
2.新的命令可以很容易地加入到系统中。
3.可以比较容易地设计一个组合命令。
4.调用同一方法实现不同的功能

// 命令
var CreateCommand = function( receiver ){
 this.receiver = receiver;
}
CreateCommand.prototype.execute = function() {
 this.receiver.action();
}
// 接收者 电视
var TVOn = function() {}
TVOn.prototype.action = function() {
  alert("TVOn");
}
// 接收者 电视
var TVOff = function() {}
TVOff.prototype.action = function() {
  alert("TVOff");
}
// 调用者 遥控器
var Invoker = function( tvOnCommand, tvOffCommand ) {
  this.tvOnCommand = tvOnCommand;
  this.tvOffCommand = tvOffCommand;
}
Invoker.prototype.tvOn = function() {
  this.tvOnCommand.execute();
}
Invoker.prototype.tvOff = function() {
  this.tvOffCommand.execute();
}

执行Client

var tvOnCommand = new CreateCommand( new TVOn() );
var tvOffCommand = new CreateCommand( new TVOff() );
var invoker = new Invoker( tvOnCommand, tvOffCommand );
invoker.tvOn();
invoker.tvOff();

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

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

Javascript 相关文章推荐
node.js中的fs.lchownSync方法使用说明
Dec 16 Javascript
详谈javascript中的cookie
Jun 03 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
javascript的replace方法结合正则使用实例总结
Jun 16 Javascript
引用jquery框架后出错的解决方法
Aug 09 Javascript
微信小程序 页面跳转传递值几种方法详解
Jan 12 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
vue实现的上拉加载更多数据/分页功能示例
May 25 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 Javascript
vue实现虚拟列表功能的代码
Jul 28 Javascript
JavaScript代码实现微博批量取消关注功能
Feb 05 Javascript
使用selenium抓取淘宝的商品信息实例
Feb 06 #Javascript
vue一个页面实现音乐播放器的示例
Feb 06 #Javascript
使用百度地图实现地图网格的示例
Feb 06 #Javascript
js中的闭包学习心得
Feb 06 #Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
Feb 06 #Javascript
Vue仿今日头条实例详解
Feb 06 #Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 #Javascript
You might like
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
理解javascript闭包
2015/12/15 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
python的pdb调试命令的命令整理及实例
2017/07/12 Python
python并发编程之线程实例解析
2017/12/27 Python
python学习基础之循环import及import过程
2018/04/22 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
中专毕业生求职简历的自我评价
2013/10/21 职场文书
经典促销广告词大全
2014/03/19 职场文书
廉政承诺书
2015/01/19 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
红歌会主持词
2015/07/02 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
小学三年级作文之写景
2019/11/05 职场文书