Я хочу создать экземпляр учетной записи пользователя. Я могу использовать такую фабрику:
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 ничем не проще фабричного класса. Вместо того, чтобы обслуживать фабрику, я должен обслуживать модуль.
В чем же все-таки реальное преимущество? Разве Google Guice не является еще одним заводским классом?