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 相关文章推荐
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
May 03 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
js 如何实现对数据库的增删改查
Nov 23 Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
ExtJS4中的requires使用方法示例介绍
Dec 03 Javascript
angularjs学习笔记之简单介绍
Sep 26 Javascript
AngularJS初始化静态模板详解
Jan 14 Javascript
很实用的js选项卡切换效果
Aug 12 Javascript
原生JS实现首页进度加载动画
Sep 14 Javascript
简单实现JS倒计时效果
Dec 23 Javascript
对Vue table 动态表格td可编辑的方法详解
Aug 28 Javascript
Rust中的Struct使用示例详解
Aug 14 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/04 冲泡冲煮
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
js微信分享实现代码
2020/10/11 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
Python接口测试get请求过程详解
2020/02/28 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
诉讼代理人授权委托书
2014/10/11 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
团日活动总结格式
2015/05/11 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android