zoukankan      html  css  js  c++  java
  • 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()+" 刷新菜单目录 "; } } var SubMenu = { add: function(){ var cur_date = new Date(); document.getElementById("textarea").value+=cur_date.toLocaleString()+" 新增菜单目录 "; }, del: function(){ var cur_date = new Date(); document.getElementById("textarea").value+=cur_date.toLocaleString()+" 删除子级菜单 ";} } //封装行为在命令类中 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克

  • 相关阅读:
    利用 Python 写一个颜值测试小工具
    手敲代码太繁琐?“拖拉拽”式Python编程惊艳到我了
    一道 3 行代码的 Python面试题,我懵逼了一天
    这几个冷门却实用的 Python 库,我爱了!
    如何利用Python在网上接单,兼职也能月薪过万
    薪资高,福利好,会Python的人就是这么豪横!
    js_事件——鼠标滚轮事件
    CSS3_浮动造成的的li反向排列
    CSS3_-webkit-font-smoothing字体抗锯齿渲染
    解决a标签下的image元素下方的空白
  • 原文地址:https://www.cnblogs.com/goodboyzjm/p/11552128.html
Copyright © 2011-2022 走看看