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 相关文章推荐
基于jquery的loading效果实现代码
Nov 05 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
Javascript合并表格中具有相同内容单元格示例
Aug 11 Javascript
jQuery中not()方法用法实例
Jan 06 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
May 14 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
AngularJs bootstrap搭载前台框架——准备工作
Sep 01 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
Apr 26 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 Javascript
详解Vue 如何监听Array的变化
Jun 06 Javascript
微信小程序与公众号实现数据互通的方法
Jul 25 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易混淆知识整理笔记
2015/09/24 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
简单的Python抓taobao图片爬虫
2014/10/26 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
如何使用python操作vmware
2019/07/27 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
社区七一党员活动方案
2014/01/25 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
公安学专业求职信
2014/07/27 职场文书
2014年教研组工作总结
2014/11/26 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript