观点
Facade形式为更大的代码供应了一个轻易的高层次接口,能够隐蔽其底层的真是复杂性。
能够把它想成是简化API来展现给其他开发人员。
优瑕玷
长处
- 简化接口
- 运用者与代码解耦
- 易于运用
瑕玷
- 存在隐性本钱,机能相对差一些
运用
栗子1
jquery框架中的$(el),对外供应一个简朴接口,完成种种元素的拔取,用户没必要手动挪用框架内部的种种要领,运用简朴,下面供应了简化了的jq DOM拔取的完成。
jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
};
jQuery.fn = jQuery.prototype = {
init: function( selector, context, rootjQuery ) {
var match, elem;
// HANDLE: $(""), $(null), $(undefined), $(false)
if ( !selector ) {
return this;
}
// Handle HTML strings
if ( typeof selector === "string" ) {
...
} else if ( selector.nodeType ) {
...
} else if ( jQuery.isFunction( selector ) ) {
...
}
return jQuery.makeArray( selector, this );
//将一个 HTMLElements 鸠合转换成对应的数组对内和merge雷同能够操纵类数组
}
}
.css()同理
栗子2
这个例子是表面形式和模块形式的组合,对外供应一个越发简朴的facade接口。
let 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();
}
}
}
}());
module.facade({run: true, value: 10});
参考
《JavaScript设想形式》
JS设想形式系列文章
JS设想形式之Module(模块)形式、Revealing Module(展现模块)形式
JS设想形式之Singleton(单例)形式
JS设想形式之Facade(表面)形式