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) );
  • 相关阅读:
    洛谷P2737 [USACO4.1]麦香牛块Beef McNuggets(DP,裴蜀定理)
    洛谷P4924 魔法少女小Scarlet
    洛谷P3912 素数个数
    洛谷P4016 负载平衡问题(费用流)
    洛谷P2736 [USACO3.4]“破锣摇滚”乐队 Raucous Rockers
    母函数(生成函数)
    洛谷P4086 [USACO17DEC]My Cow Ate My Homework S
    洛谷P5097 [USACO04OPEN]Cave Cows 2(ST表)
    洛谷P2713 罗马游戏(左偏树)
    洛谷P1260 工程规划
  • 原文地址:https://www.cnblogs.com/winderby/p/4321160.html
Copyright © 2011-2022 走看看