结构型-外观模式

概念

Facade Pattern:又叫门面模式,定义了一个高层接口,为子系统中的一组接口提供一个统一的接口。

img

使用

经常用在做兼容的时候,将跨浏览器差异全部集中放置到一个外观模式实例中来提供一个对外接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var addEvent = function( dom, type, fn ){
//对于支持DOM2级事件处理程序addEvenetListener方法的浏览器
if( dom.addEventListener ){
dom.addEventListener( type, fn, false );
}else if( dom.attachEvent ){
dom.attachEvent( "on" + type, fn );
}else{
dom[ on + "type" ] = fn;
};
}

var myp = document.getElementById('myp');
addEvent(myp,'click',function(){
console.log('hahah');
})

优点

  • 解耦:用户无需知道子系统的接口,简化客户端调用子系统的调用过程,使得子系统使用起来更加容易。同时便于子系统的扩展和维护。
  • 符合迪米特法则(最少知道原则):子系统只需要将需要外部调用的接口暴露给外观类即可

缺点

  • 违背了开闭原则:在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端代码