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 相关文章推荐
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
JS常用正则表达式总结
Nov 12 Javascript
简单时间提示DEMO从0开始一直进行计时
Nov 19 Javascript
jQuery的css()方法用法实例
Dec 24 Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 Javascript
原生js验证简洁注册登录页面
Dec 17 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
Dec 18 Javascript
手把手搭建安装基于windows的Vue.js运行环境
Jun 12 Javascript
jfinal与bootstrap的登出实战详解
Nov 27 Javascript
如何使用 vue + d3 画一棵树
Dec 03 Javascript
webpack是如何实现模块化加载的方法
Nov 06 Javascript
layui写后台表格思路和赋值用法详解
Nov 14 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
PHP4实际应用经验篇(6)
2006/10/09 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
简单的JS多重继承示例
2008/03/13 Javascript
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
JS不完全国际化&本地化手册 之 理论篇
2016/09/27 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
Windows下为Python安装Matplotlib模块
2015/11/06 Python
没编程基础可以学python吗
2020/06/17 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
应届生污水处理求职信
2013/11/06 职场文书
校园达人秀策划书
2014/01/12 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
会计人员演讲稿
2014/09/11 职场文书
法定代表人身份证明书
2015/06/18 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
OpenCV实现普通阈值
2021/11/17 Java/Android