JS设想形式之Facade(表面)形式

观点

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(表面)形式

    原文作者:大海怪
    原文地址: https://segmentfault.com/a/1190000017305418
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞