前段时间我学到了很多设计模型,特别是创作模型。 过了一段时间,我发现自己使用了一种我曾经存在的模式,但当我试图搜索它时,我没有找到任何参考。基本上它是对工厂的一个小修改,它利用闭包来解决类的依赖关系。实际上,它是一个班级工厂。让我用一些代码来说明这一点:
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根本不支持这种模式。
这是一个糟糕的模式吗?除了较少的模块化和非工作文档工具之外,我找不到它的任何缺点。
答案 0 :(得分:0)
是的,这是完全被接受的模式。然而,我们很少称它为“工厂”,更常见的只是“模块” - 在这种情况下是依赖注入。像AMD这样的许多模块系统使用这种模式。
但是,您应确保工厂生成单件 - 即不应多次调用Factory
并创建多个类似的类。