JS设计模式之命令模式
在js中一共有23种不同的设计模式。
在这里介绍一个简单的命令模式
命令模式是对命令进行封装,由调用者发起命令请求,接收者执行请求。
命令模式把命令抽象成对象,根据传入的命令对象来执行命令,从而减少的对象之间的耦合,使用命令模式使这个模拟变的很好扩展,控制器和命令的执行耦合度很低,可以很容易的扩展命令和控制器.
命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
style中的代码
<style type="text/css"> .bnt{ margin: 5px; border: 0; width: 70px; height: 35px; background: #6B78BF; color: white; font-size: 14px; cursor: pointer; } #textarea{ margin: 5px; width: 400px; height: 200px; resize: none; color: #666; font-size: 14px; border: 2px solid #6B78BF; } </style>
js中的代码是
<script type="text/javascript"> // 在页面中使用例:setCommand(btn, refreshMenuBarCommand );来发送命令 // setCommand 函数负责往按钮上面安装命令,预留好安装命令的接口
//通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。
var setCommand = function( btn , command ){ btn.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 btn1 = document.getElementById("button1"); var button2 = document.getElementById("button2"); var button3 = document.getElementById("button3"); setCommand( btn1, refreshMenuBarCommand ); setCommand( btn2, addSubMenuCommand ); setCommand( btn3, delSubMenuCommand ); } </script>
一道逻辑思维题
有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?
140->70+70 获得两份70克(第一次)
70->35+35 获得一份70克 两份35克(第二次)
35+70=105 获得一份105克和一份35克
105->50+7+ 55+2 获得一份50克的盐和55克的盐(第三次)
55+35=90 把55克的盐和35克的放在一起90克