命令模式,英文名: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接口给开发人员调用,模块模式把具体的比较复杂的实现代码放到自己的内部的方法中。
加油!