外观/门面模式(Facade)

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组合起来坐一个初函数中。

 

之利

简化了一些苛接口(如$.ajax,
$.event.add),清除不再要之死目标和供平等栽更加纯粹,便利的措施呈现接口功能。编写一次于做代码,就好频繁使用其,节省了代码量,时间以及生机。它还提供了比高层的功力,抽象,降低客户端代码对根接口的耦合。如$.getJSON,通过$.ajax方法为得获平等之力量。但每次都需配备相同之参数,如果获得JSON的急需特别频繁,页面被的如出一辙之代码就用写死频繁。而卷入一不良$.getJSON,之后就是掉写过多代码,且该方法重新直观。

 

之弊

外观模式并非必不可少,同样的作用未采用其也会成就功能。如未以$.getJSON,通过$.ajax方法吗得取相同的效能。此外由于长了一致层闭包,性能会起必然下降。

 

相关文章