在Typescript中的工厂模式并仅公开工厂类

时间:2016-09-14 15:44:16

标签: java node.js typescript factory

我正在使用工厂模式在typescript中开发一个节点模块,我想只公开工厂类和接口。

结构:

iexp.ts

C_INCLUDE_PATH=/usr/local/Cellar/imagemagick/6.9.5-9_1/include/ImageMagick-6 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig gem install rmagick

A.ts

export interface IExp { 
    methodX(); 
}

B.ts

class A implements IExp {
}

factory.ts

class B implements IExp {
}

所有类和接口都在自己的源文件中。我不想公开A类和B类,所以我没有使用 export ,但是我也无法在ExpFactory类中使用它们。在Java中,类可以有包范围,但是我怎样才能在打字稿中做同样的事情?

2 个答案:

答案 0 :(得分:1)

如果他们在同一个文件中,您可以使用A中的BExpFactory。如果没有,那么你必须从模块中导出它们,这是全部或全部(它只能是公共的)。

但是,这并不能让您从模块外部轻松访问它们。如果要捆绑库,则入口点必须再次导出类,否则将无法在模块外部访问它们。如果您没有捆绑,用户必须找出相对路径并直接从中导入。

答案 1 :(得分:0)

(个人风格建议)在javascript中,使用闭包和选择包可以更好地实现工厂模式。

class Root {
  method1()
  method2()
}

class Child extends Root {
  method1() //...
}
通过类似

之类的东西可以更好地实现

function Root( opts : Options ) {
   var method1 = opts.method1 || defaultMethod1()
   var method2 = opts.method2 || defaultMethod2()
   return { method1, method2 }
}

使用new在javascript中完全没有必要,甚至不被视为有害。