0

我有一个工厂类,它创建某种类型的对象(比如,MyClass)。

工厂类属于特定包,我想在该包中的实现和更新版本之间动态切换,以进行测试。

例如,原始包是pack1,新版本是pack2,类名pack1.Factorypack2.Factory. 或将通过属性文件中的简单参数指定pack1pack2此外,该MyClass类型对于两个包都是通用的,并且只应使用普通的 vanilla Java(即,没有第三方库)。

我正在考虑使用Class.forName()加载pack1.Factorypack2.Factory(取决于指定的属性),然后通过反射调用所有工厂方法。

这是最好的方法吗?

4

2 回答 2

3

这几乎是注入控制的经典用例。Guice应该让您立即开始。

需要有一个接口,例如IFactory,带有一些工厂方法create。创建两个 Guice 模块——一个绑定IFactorypack1.Factory,另一个绑定到pack2.Factory. 当然,这两个工厂都应该实现IFactory.

然后在 main 方法中处理您的参数,该参数确定应该使用哪个工厂,并分别基于其中一个模块创建一个注入器。

于 2012-04-25T18:58:51.033 回答
-1

您应该尽可能避免反思。它使您的代码更难理解、更难重构和更难维护。

相反,您可以让您的工厂类实现一个接口,创建您要测试的工厂的实例并使用此实例调用您的测试。

于 2012-04-25T18:55:49.823 回答