Разве Google Guice не просто еще одна фабрика?

Я хочу создать экземпляр учетной записи пользователя. Я могу использовать такую ​​фабрику:

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 не является еще одним заводским классом?

7
задан 15 August 2012 в 09:13
поделиться