每日一贴,今天的内容关键字为外观模式函数
Facade Pattern 内国有些书译为门面式模,如「Java与式模」,「JavaScript设计式模」。有些则译为外观式模,如「设计式模:可复用面向对象件软的基本」,「Java设计式模」。这里用应名词“外观式模”。
外观式模属于
接口型式模,它供提一个更便利,高层接口,用应一致性的面界使得API更加轻易用应。它有两个作用:
- 简化庞杂接口
- 解耦和,屏蔽客户端对子系统的直接访问
外观式模在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方法也可以到得雷同的效果。此外由于增加了一层闭包,性能会有定一下降。
文章结束给大家分享下程序员的一些笑话语录: N多年前,JohnHein博士的一项研究表明:Mac用户平均IQ要比PC用户低15%。超过6000多的参加者接受了测试,结果清晰的显示IQ比较低的人会倾向于使用Mac。Mac用户只答对了基础问题的75%,而PC用户却高达83%。