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 相关文章推荐
window.js 主要包含了页面的一些操作
Dec 23 Javascript
js 小贴士一星期合集
Apr 07 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
Jan 13 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 Javascript
jquery操作select大全
Apr 25 Javascript
jQuery链使用指南
Jan 20 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
JS判断时间段的实现代码
Jun 14 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
vue .js绑定checkbox并获取、改变选中状态的实例
Aug 24 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 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调用数据库的存贮过程
2006/10/09 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
js去除重复字符串两种实现方法
2013/01/09 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
为输入框加入数字js校验代码分享
2017/11/02 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
python实现socket端口重定向示例
2014/02/10 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
如何在sublime编辑器中安装python
2020/05/20 Python
python为什么要安装到c盘
2020/07/20 Python
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
减负增效提质方案
2014/05/23 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
详解flex:1什么意思
2022/07/23 HTML / CSS