ユーザーアカウントをインスタンス化します。その後、これはクライアントコードである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)));
私は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
さて、私は "モジュール" を書き込む必要があります:私はこのような工場を使用することができます
私の質問です: 工場クラスを書く代わりに、私はモジュールクラスを書く必要があります。上記の例から、私は何の利点もありません。 Moduleクラスはリフレクションを使用しますが、ファクトリクラスの代入文よりも処理が遅いです。 Moduleクラスは、ファクトリクラスより単純ではありません。工場を維持する代わりに、モジュールを維持する必要があります。
とにかく本当の利点は何ですか? Google Guiceは別のファクトリークラスではありませんか?
手作業による擬似コードは、不足している部分を修正しない限りコンパイルされません。 –
ユーザーには、登録するアカウントの種類を選択させたいからUserTypeが必要です。彼らがFreeを選択すると、ブラウザは "Free"パラメータを送信します。これは文字列です。タイプセーフではないため、enumに変換します。 –