facade(外观模式)

210 阅读1分钟

使用场景

  • 当你需要将一个内部实现比较复杂的东西转化成一个别人使用起来稍微简单一些的东西,而不需要知道其内部的实现。
  • Facade模式为更大的代码体提供了一个方便的高层次接口,能够隐藏其底层的真是复杂性。可以把它想成是简化API来展示给其他开发人员,通常都是提高可用性。

实现思想

  • 利用函数对一系列的操作进行二次封装。

具体代码

  • Facade不是必须单独使用的,它可以和其他模式集成,下面将它与module模式结合,module模式的实例包含很多已经定义的私有方法,然后使用Facade提供一个更简单的API来访问这些方法。
var module = (function () {
    var _private = {
        i: 5,
        get: function () {
            return this.i;
        },
        set: function (val) {
            this.i = val;
        },
        run: function () {
            if (this.i === 0) {
                console.log('running end');
            }
            console.log(this.i--, 'running');
        }
    };
    
    return {
        facade: function (val) {
            _private.set(val);
            _private.run();
            _private.run();
            _private.run();
            _private.run();
        }
    }
}());
//  输出:
/*
5 "running"
4 "running"
3 "running"
2 "running"
*/
module.facade(5);