类的工厂是一个有效的javascript模式吗?

时间:2017-03-14 14:20:18

标签: javascript design-patterns

前段时间我学到了很多设计模型,特别是创作模型。 过了一段时间,我发现自己使用了一种我曾经存在的模式,但当我试图搜索它时,我没有找到任何参考。基本上它是对工厂的一个小修改,它利用闭包来解决类的依赖关系。实际上,它是一个班级工厂。让我用一些代码来说明这一点:

function Factory(depA,depB){

    function MyClass(something){
        this.something = something;
    }

    MyClass.prototype.methodA(){ // use depA}
    MyClass.prototype.methodB(){ // use depB}

    return MyClass
}

我们假设depA是一个数据库,depB是一个记录器。然后你可以像这样使用工厂

var BindedClass = Factory(database,logger);
var instance = new BindedClass(something);

我发现这个模式非常适用于注入公共依赖项,而不会失去对实际实例化类的控制。

然而,这有一些问题。例如,让我意识到这并不常见的事情之一就是JSDoc根本不支持这种模式。

这是一个糟糕的模式吗?除了较少的模块化和非工作文档工具之外,我找不到它的任何缺点。

1 个答案:

答案 0 :(得分:0)

是的,这是完全被接受的模式。然而,我们很少称它为“工厂”,更常见的只是“模块” - 在这种情况下是依赖注入。像AMD这样的许多模块系统使用这种模式。

但是,您应确保工厂生成单件 - 即不应多次调用Factory并创建多个类似的类。