zoukankan      html  css  js  c++  java
  • javascript模式——Command

    假设我们要做一个计算器程序

    var calculator = {
        add: function( x, y ){
            return x + y;
        },
        sub: function( x, y ){
            return x - y;
        }
    }
    
    // 调用
    calculator.add(1,2);

    通过calculator.add这样直接调用,我们实现了具有加减运算的计算器功能。不过在许多情况下,我们不希望直接访问calculator。原因是会增加其他对象对calculator的依赖。试想一下,我们已经实现了计算器功能,并在其它多个地方使用calculator.add,调用很多。此时,如果我们对calculator计算器这个对象的结构进行修改,将要同时修改所有调用计算器。这大大违背了尽可能解耦对象的OOP理论。

    下面我们来修改一下代码

    通过添加一个入口函数,根据输入的命令来选择调用哪个函数。代码如下:

    var calculator = {
        add: function( x, y ){
            return x + y;
        },
        sub: function( x, y ){
            return x - y;
        }
    }
    
    // 添加一个总入口,根据命令调用相应的方法
    calculator.calculate = function ( method ) {
        return calculator[method] && calculator[method].apply( calculator, [].slice.call(arguments, 1) );
    };
    
    // 外部调用
    console.log( calculator.calculate('add',1,2) );

    此时外部调用降低了对calculator对象的依赖。那么回想一下先前的一个问题,calculator的结构修改会不会引起外部调用的修改?答案是不会。当calculator结构变化了,我们只需要对calculator的calculate也进行相应的调整,外部的调用不需要跟着改变。

    var calculator = {
        box:{
            add: function( x, y ){
                return x + y;
            },
            sub: function( x, y ){
                return x - y;
            }
        }
        // other
    }
    
    // 添加一个总入口,根据命令调用相应的方法
    calculator.calculate = function ( method ) {
        return calculator.box[method] && calculator.box[method].apply( calculator, [].slice.call(arguments, 1) );
    };
    
    // 调用方法一样
    console.log( calculator.calculate('add',1,2) );
  • 相关阅读:
    【区块链整理】四、区块链数据结构
    【区块链整理】三、以太坊挖矿算法 ETHASH
    【区块链整理】二、比特币交易脚本
    【区块链整理】一、概念
    FISCO BCOS CRUD 功能和 CNS 合约命名服务杂记
    前台静态资源打包ios
    叹而立之年,忆往昔旧事
    基于Bootstrap table组件实现多层表头配置
    js或jQuery获取当前屏幕的各种高度
    echarts图表基础配置
  • 原文地址:https://www.cnblogs.com/winderby/p/4321160.html
Copyright © 2011-2022 走看看