外觀模式
目的
為復(fù)雜系統(tǒng)提供統(tǒng)一的接口
何時(shí)使用
- 需要一個(gè)簡單的接口屏蔽復(fù)雜系統(tǒng)
- 系統(tǒng)實(shí)現(xiàn)之間有很多依賴
- 系統(tǒng)和子系統(tǒng)需要分層
舉例
web服務(wù)器的service是一個(gè)典型的外觀模式,在服務(wù)器內(nèi)部可能有復(fù)雜的業(yè)務(wù)邏輯司抱,也可能有很多數(shù)據(jù)庫操作,但是客戶端在訪問服務(wù)器的時(shí)候只需要功能性的接口姚炕。
代碼
var module = (function() {
var _private = {
i: 5,
get: function() {
console.log( "current value:" + this.i);
},
set: function( val ) {
this.i = val;
},
run: function() {
console.log( "running" );
},
jump: function(){
console.log( "jumping" );
}
};
return {
facade: function( args ) {
_private.set(args.val);
_private.get();
if ( args.run ) {
_private.run();
}
}
};
}());
// Outputs: "current value: 10" and "running"
module.facade( {run: true, val: 10} );
上面facade
的接口屏蔽了很多內(nèi)部接口。
結(jié)論
facade模式一個(gè)不好的地方是會(huì)影響性能孔庭》尥担可以對(duì)比一下document.getElementById('foo');
和$('#foo');
的效率
http://jsperf.com/getelementbyid-vs-jquery-id