Mic*_*ler 1 java factory factory-pattern
在代码审查中,出现了以下评论:"我认为,您实际上是指将工厂注入实例,以便您可以在需要时重新启动工厂." 并且"重要提示:工厂不应该是静态的,而应该注入."
Test.java:
Foo foo = FooFactory.get(argument);
Run Code Online (Sandbox Code Playgroud)
FooFactory.java:
public final class FooFactory {
public static Foo get(String argument) {
return new Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
我应该怎么做呢?"重新绑定"在评论者的第一条评论中意味着什么?
通过执行您所做的操作,您基本上忽略了依赖注入,并使用了静态工厂.因此,如果在单元测试中,您希望工厂返回虚假的Foo实例而不是实例,则不能.
相反,你应该使用依赖注入(这里的Spring示例):
public class SomeService
private FooFactory fooFactory;
@Autowired
public SomeService(FooFactory fooFactory) {
this.fooFactory = fooFactory;
}
public void someMethod(String arg) {
Foo foo = fooFactory.create(arg);
...
}
....
}
Run Code Online (Sandbox Code Playgroud)
现在,在单元测试中,您可以注入任何您想要的FooFactory实现(通常是模拟).