JS命令模式例子之菜单程序


Posted in Javascript onOctober 10, 2016

命令模式的应用场景:

        有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么,此时希望用一种松耦合的方式来设计软件,使得请求发送者和请求接收者能够消除彼此之间的耦合关系。

html代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8" />
 <title>js:命令模式</title>
 <script type="text/javascript" src="command.js"></script>
</head>
<style type="text/css">
button{
 margin: 5px;
 border: 0;
 width: 70px;
 height: 35px;
 background: #6B78BF;
 color: white;
 font-size: 14px;
 font-family: "微软雅黑";
 cursor: pointer;
}
#textarea{
 margin: 5px;
 width: 400px;
 height: 200px;
 resize: none;
 color: #666;
 font-size: 14px;
 border: 2px solid #6B78BF;
}
</style>
<body>
<button id="button1">刷新</button>
<button id="button2">新增</button>
<button id="button3">删除</button>
<br/>
<textarea id="textarea">
这是预设的内容
</textarea>

</body>
</html>

js代码:

// 在页面中使用例:setCommand( button1, refreshMenuBarCommand );来发送命令


// setCommand 函数负责往按钮上面安装命令,预留好安装命令的接口
var setCommand = function( button , command ){
 button.onclick = function(){
 command.execute();
 }
}

// 编写点击按钮之后的具体行为:刷新菜单界面、增加子菜单和删除子菜单
var MenuBar = {
 refresh: function(){
 var cur_date = new Date();
 document.getElementById("textarea").value+=cur_date.toLocaleString()+" 刷新菜单目录\r";
 }
}
var SubMenu = {
 add: function(){
 var cur_date = new Date();
 document.getElementById("textarea").value+=cur_date.toLocaleString()+" 新增菜单目录\r";
 },
 del: function(){
 var cur_date = new Date();
 document.getElementById("textarea").value+=cur_date.toLocaleString()+" 删除子菜单\r";
 }
}

//封装行为在命令类中
var RefreshMenuBarCommand = function( receiver ){
 this.receiver = receiver;

}
RefreshMenuBarCommand.prototype.execute = function(){
 this.receiver.refresh();
}
var AddSubMenuCommand = function( receiver ){
 this.receiver = receiver;
}
AddSubMenuCommand.prototype.execute = function(){
 this.receiver.add();
}
var DelSubMenuCommand = function( receiver ){
 this.receiver =receiver
}
DelSubMenuCommand.prototype.execute = function(){
 this.receiver.del();
}

//命令接收者传入到 command 对象
var refreshMenuBarCommand = new RefreshMenuBarCommand( MenuBar );
var addSubMenuCommand = new AddSubMenuCommand( SubMenu );
var delSubMenuCommand = new DelSubMenuCommand( SubMenu );

window.onload = function(){
 //把 command 对象安装到 button 上面
 var button1 = document.getElementById("button1");
 var button2 = document.getElementById("button2");
 var button3 = document.getElementById("button3");
 setCommand( button1, refreshMenuBarCommand );
 setCommand( button2, addSubMenuCommand );
 setCommand( button3, delSubMenuCommand );
}

总结:

从书上抄代码练习的过程中出了很多错误,最严重的莫过于“receiver”这个单词写错了导致很多天都再没看这个练习,出错的过程让我能够重新审视代码的内容,逐行进行理解与调试。虽然仍然不很理解命令模式,但是通过这部分的内容和对mySQL的学习,心里隐隐的留下了关于命令模式的影子。

参考:

《JavaScript设计模式与开发实践》第9章9.2节

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
splice slice区别
Oct 09 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
Apr 13 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
Dec 09 Javascript
js取得url地址参数实例
Feb 22 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
May 21 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 Javascript
js实现拖拽与碰撞检测
Sep 18 Javascript
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
Oct 10 #Javascript
KnockoutJS 3.X API 第四章之click绑定
Oct 10 #Javascript
KnockoutJS 3.X API 第四章之事件event绑定
Oct 10 #Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
Oct 10 #Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 #Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 #Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 #Javascript
You might like
php adodb连接不同数据库
2009/03/19 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
php 强制下载文件实现代码
2013/10/28 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
Node.js实现文件上传
2016/07/05 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python 格式化输出百分号的方法
2019/01/20 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python中的句柄操作的方法示例
2019/06/20 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Python timeit模块原理及使用方法
2020/10/10 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
EntityManager都有哪些方法
2013/11/01 面试题
女方回门宴答谢词
2014/01/14 职场文书
企业活动策划方案
2014/06/02 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
租赁协议书
2015/01/27 职场文书
大雁塔导游词
2015/02/04 职场文书