Facade Pattern
国内小书译为门面模式,如「Java与模式」,「JavaScript设计模式」。有些则翻为外观模式,如「设计模式:可复用面向对象软件之基本功」,「Java设计模式」。这里运用名词“外观模式”。

 

外观模式属于接口型模式,它提供一个复利于,高层接口,使用一致性的界面使得API更加容易使。它发三三两两个意:

  1. 简化复杂接口
  2. 解耦和,屏蔽客户端对系统的一直访问

 

外观模式于JavaScript中于过多类库频繁使用。由于早期各浏览器提供的API差异性较充分,类库的中坚打算有是平这些凹凸不平,提供合接口供前端工程师使用。使用外观模式,我们可以间接地同一个复杂子系统打交道,与直看相比耦合性更没有,更不错出错。

 

本添加波标准浏览器采用addEventListener,旧本子IE使用attachEvent,可能自己用封装一个addEvent函数,这个addEvent函数就是一个外衣。

function addEvent(el, type, fn) {
    if (el.addEventListener) {
        el.addEventListener(type, fn, false)
    } else if (el.attachEvent) {
        el.attachEvent('on' + type, fn)
    } else {
        el['on' + type] = fn
    }
}

实际上就是是用简单只例外之函数放到自己定义的函数里,之后采取该函数得一定功能一旦不再使用产生差异性的函数。

 

而且如果处理DOM事件频仍,有时会以采取以下方法

e.stopPropagation()
e.preventDefault()

可应用外观模式开创一个新方式stop同时调用这半个章程

function stop(e) {
    e.stopPropagation()
    e.preventDefault()   
}

 

jQuery中大量采用外观模式,比如数据缓存模块,内部internalData,internalRemoveData是低级API,实现核心作用,外部提供了data,removeData这片只高级API供客户端程序员采用。

事件模块也是这样,内部生jQuery.event.add,jQuery.event.remove,jQuery.event.trigger等低级API,向他提供了on/bind,off/unbind,trigger等高等API,甚至又用on又提供了.click/.dblclick/mouseover/mousedown等还迅捷的长事件API。

Ajax模块也是外观模式的独立事例,jQuery提供了一个主导的,低级接口$.ajax方法,通过包装$.ajax产生了有的福利函数$.get,
$.post。再通过包$.get又闹了$.getJSON,$.getScript等还尖端的法。

 

jQuery里之轩然大波模块和Ajax模块可说凡是外观模式于JS中之经典应用。

 

适用场合

对于那些频繁同时出现的代码,如函数a和b多次又出现在代码中,应考虑将a,b组合起来坐一个新函数中。

 

之利

简化了有的错综复杂接口jQuery(如$.ajax,
$.event.add),清除不再需要之良目标及提供相同种更加纯粹,便利之方式展现接口功能。编写一差做代码,就足以频繁用她,节省了代码量,时间跟精力。它还提供了于高层的功能,抽象,降低客户端代码对根接口的耦合。如$.getJSON,通过$.ajax方法呢可以落平等之功效。但老是都急需安排相同的参数,如果得到JSON的求异常频繁,页面被的同样的代码就需写死频繁。而卷入一糟糕$.getJSON,之后就是丢写过多代码,且该措施还直观。

 

之弊

外观模式并非必不可少,同样的机能未动她为会一气呵成功能。如无下$.getJSON,通过$.ajax方法也得以博相同的作用。此外由于长了一如既往叠闭包,性能会来得下降。

 

相关文章