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 相关文章推荐
javascript生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
node.js中的fs.unlink方法使用说明
Dec 15 Javascript
移动Web中图片自适应的两种JavaScript解决方法
Jun 18 Javascript
jQuery常用且重要方法汇总
Jul 13 Javascript
详解jQuery Mobile自定义标签
Jan 06 Javascript
基于jquery实现智能表单验证操作
May 09 Javascript
详解Angular 4.x Injector
May 04 Javascript
在react中使用vuex的示例代码
Jul 30 Javascript
Node.js中package.json中库的版本号(~和^)
Apr 02 Javascript
react+redux仿微信聊天界面
Jun 21 Javascript
Vue实现计算器计算效果
Aug 17 Javascript
Ant Design Pro 之 ProTable使用操作
Oct 31 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
咖啡常见的种类
2021/03/03 新手入门
PHP中函数内引用全局变量的方法
2008/10/20 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP面向对象法则
2012/02/23 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
详解Python迭代和迭代器
2016/03/28 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
python plotly画柱状图代码实例
2019/12/13 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
python中os包的用法
2020/06/01 Python
书法比赛获奖感言
2014/02/10 职场文书
银行求职信范文
2014/05/26 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
车间质检员岗位职责
2015/04/08 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python