我想实例化一个用户帐户。我可以使用这样的工厂:
public class UserFactory {
public User newUser(UserType type) {
if (type == UserType.FREE) return new FreeUser();
}
}
User user = UserFactory.newUser(UserType.FREE); //UserType.FREE is an enum
现在,如果我使用 Google Guice,我必须编写一个“模块”:
public class UserModule extends AbstractModule {
public voidSetType(UserType type) {
this.type = type;
}
@Override
protected void configure() {
if (this.type = UserType.FREE)
bind(User.class).to(FreeUser.class);
else bind .....
}
}
然后,这是客户端代码:
Injector injector = Guice.createInjector(new UserModule().setType(UserType.FREE)));
我的问题是:我必须编写一个模块类,而不是编写一个工厂类。从上面的例子中,我没有看到任何优势。Module 类使用反射,它比我在工厂类中的赋值语句要慢。Module 类并不比工厂类简单。我必须维护模块,而不是维护工厂。
无论如何,真正的优势是什么?Google Guice 不就是另一个工厂类吗?