揭示模式用例

Revealing pattern usecase

我正在读一本名叫 "Learning javascript design patterns" 的书,作者是 Addy Osmani。这本书很棒。

有一个使用揭示设计模式的例子:

var myRevealingModule = (function () {

    var privateVar = "Ben Cherry",
        publicVar = "Hey there!";

    function privateFunction() {
        console.log( "Name:" + privateVar );
    }

    function publicSetName( strName ) {
        privateVar = strName;
    }

    function publicGetName() {
        privateFunction();
    }


    // Reveal public pointers to
    // private functions and properties

    return {
        setName: publicSetName,
        greeting: publicVar,
        getName: publicGetName
    };

})();

myRevealingModule.setName( "Paul Kinlan" );

现在,我当然明白它是如何工作的,但我的问题更简单 - 在常规的经典节点 webapp 中使用它的用例是什么?

假设我有一个汽车模块,我希望在我拥有的某些程序中创建它。在这种情况下,我看不出如何使用该模式。我怎样才能传递参数使 new Car(args)?

我应该对单身人士使用这种模式吗?创建工厂?

JavaScript 是一种有点奇怪的语言,如果您不遵循最佳实践并且不熟悉 ECMA 标准,有时会做一些奇怪的事情。 JavaScript 语法中有许多奇怪的东西,其中之一就是自执行(自调用)函数......

您可以在此处阅读更多详细信息

 http://blog.mgechev.com/2012/08/29/self-invoking-functions-in-javascript-or-immediately-invoked-function-expression/

您可以像这样传递参数:

https://jsfiddle.net/6bhn80oz/

此模式用于在公开 ("revealing") public 接口时封装一些私有状态。

这个模式可以有很多用例,但它的核心是展示如何将实现(私有变量)与 API(公开的函数)分开,这在 javascript.

只要你有一个有状态的模块,就使用它是个好主意。

要提供参数,只需公开一个接受参数的 API 函数,例如

return {
    createCar: function(model, mileage) { ... }
}

我在angular1创建服务的时候经常用到。对我来说,更容易知道我可以在服务中访问哪些方法 and/or 变量,并将 return {} 之外的所有其他内容保密。

angular.module('myModule')
.factory('someService', function () {
    function myFunction(){
    }
    return{
        getSomething:myFunction
    }
});