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 相关文章推荐
新手入门常用代码集锦
Jan 11 Javascript
清华大学出版的事半功倍系列 javascript全部源代码
May 04 Javascript
jquery.form.js用法之清空form的方法
Mar 07 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
May 14 Javascript
javascript实现输出指定行数正方形图案的方法
Aug 03 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
JavaScript 拖拽实例代码
Sep 21 Javascript
详解js中==与===的区别
Jan 08 Javascript
bootstrap实现二级下拉菜单效果
Nov 23 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
解决vue 给window添加和移除resize事件遇到的坑
Jul 21 Javascript
js实现详情页放大镜效果
Oct 28 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP Token(令牌)设计
2008/03/15 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
深入分析php之面向对象
2013/05/15 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
python实现简单购物商城
2016/05/21 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
爱岗敬业演讲稿范文
2014/01/14 职场文书
工作个人的自我评价
2014/01/14 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
2015年党性分析材料
2014/12/19 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript