zoukankan      html  css  js  c++  java
  • 命令模式和外观模式

    命令模式,英文名:Command模式。

    直接用例子来说明这个模式:

    (function(){
    	var carManager = {
    		requestInfo : function(model, id){
    
    		},
    		buyVehicle: function(model, id){
    
    		}
    	};
         ...... })()

    在上面的代码中,我们定义了一个名为carManager的对象,我们可以通过carManager对象调用它的两个方法。

    但是通过命令模式,我们可以这样来调用carManager对象中的方法。

    carManager.execute("buyVehicle", "chaojidan", "01");

    carManager.execute("requestInfo", "chaojidan", "01");

    要实现这种方式的调用,我们需要给carManager添加execute方法,此方法就是把carManager对象中的所有方法进行了抽象处理,变成了调用carManager对象方法的统一接口。

    carManager.execute = function(name){
    	return carManager[name] && carManager[name].apply(carManager,[].slice.call(arguments,1));
    }
    

    这里,我们可以假设传入execute方法中的name为命令名,当调用此方法时,会执行此命令的方法。

    外观模式,英文名:Facade。

    基本概念:外观模式为更大的代码体提供了一个方便的高层次接口,能够隐藏其底层的真实复杂性。

    在jQuery等javascript库中经常可以看到。每当我们使用$.(el).css()等方法时,实际上我们是在使用外观模式。

    举个例子:

    跨浏览器的事件绑定。

    var addEvent = function(el, ev, fn){
    	if(el.addEventListener){
    		el.addEventListener(ev, fn , false);
    	}else if(el.attachEvent){
    		el.attachEvent("on" + ev, fn);
    	}else{
    		el["on"+ev] = fn;
    	}
    };
    

    这里的addEvent方法就是一个外观模式,我们只需要调用addEvent来进行事件的绑定,而它内部需要兼容其他浏览器进行的代码处理,我们不用去考虑。

    它只暴露了addEvent方法,从而将更复杂的实现隐藏起来。

    外观模式经常和模块模式一起实现,外观模式提供一个简单的api接口给开发人员调用,模块模式把具体的比较复杂的实现代码放到自己的内部的方法中。

    加油!

  • 相关阅读:
    IE下CSS属性float:right下换行问题解决方法
    php 中简单输出 csv和excel
    VMware 链接网络的三种模式及自己的安装方法
    ajax的应用
    php中ADODB的用法
    关于web 标准的常见问题 总结
    javascript 闭包
    php strrev 中文字符串翻转乱码的问题
    注册表 一览
    SVN Commit报错 svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted
  • 原文地址:https://www.cnblogs.com/chaojidan/p/4484418.html
Copyright © 2011-2022 走看看