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) );
  • 相关阅读:
    pytorch-VGG网络
    pytorch-Alexnet 网络
    pytorch-LeNet网络
    硬链接与软链接有什么不同(ln)
    联想《拯救者》U盘UEFI启动装win7[完美激活](4)
    笔记本键盘、触控板锁定技巧(3)
    BridgePattern(23种设计模式之一)
    AdapterPattern(23种设计模式之一)
    Arduino Wire.h(IIC)库函数详解
    进制表示法
  • 原文地址:https://www.cnblogs.com/winderby/p/4321160.html
Copyright © 2011-2022 走看看