命令模式和外观模式
命令模式,英文名: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接口给开发人员调用,模块模式把具体的比较复杂的实现代码放到自己的内部的方法中。
加油!
posted on 2015-05-07 13:50 chaojidan 阅读(1391) 评论(0) 编辑 收藏 举报