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 相关文章推荐
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
Mar 06 Javascript
javascript 尚未实现错误解决办法
Nov 27 Javascript
基于jQuery图片平滑连续滚动插件
Apr 27 Javascript
JavaScript中判断整数的多种方法总结
Nov 08 Javascript
jQuery实现垂直半透明手风琴特效代码分享
Aug 21 Javascript
js事件冒泡与事件捕获详解
Feb 20 Javascript
canvas轨迹回放功能实现
Dec 20 Javascript
node+express框架中连接使用mysql(经验总结)
Nov 10 Javascript
详解vantUI框架在vue项目中的应用踩坑
Dec 06 Javascript
JS匿名函数内部this指向问题详析
May 10 Javascript
微信小程序实现搜索历史功能
Mar 26 Javascript
js实现轮播图特效
May 28 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接口中interface存在的意义
2013/06/27 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
Node.js 8 中的重要新特性
2017/06/28 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
Python常见文件操作的函数示例代码
2011/11/15 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
python实现邮件循环自动发件功能
2020/09/11 Python
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
会计助理的岗位职责
2013/11/29 职场文书
市场专员岗位职责
2014/02/14 职场文书
活动总结报告格式
2014/05/09 职场文书
企业宣传策划方案
2014/05/29 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
邀请函模板
2015/02/02 职场文书
推荐信范文大全
2015/03/27 职场文书
恰同学少年观后感
2015/06/08 职场文书
英语读书笔记
2015/07/02 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
Python基础知识之变量的详解
2021/04/14 Python
python基础之//、/与%的区别详解
2022/06/10 Python