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克

posted on 2019-09-19 19:58  s-cream  阅读(305)  评论(0编辑  收藏  举报

导航