是类的工厂,有效的JavaScript模式



不久前,我学到了很多设计 - 特别是创造的设计。一段时间后,我发现自己使用了我的模式,但是当我尝试搜索它时,我没有找到任何参考。基本上,这是对工厂的一小部分修改,该工厂需要关闭关闭的优势来解决班级的依赖性。实际上,这是一家班级工厂。让我用一些代码来说明这一点:

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根本没有对这种模式的支持。

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

是的,这是一个完全接受的模式。但是,我们很少将其称为"工厂",更常见的只是"模块" - 在这种情况下是依赖注入。诸如AMD之类的许多模块系统都使用此模式。

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

最新更新