私は次のように非常にシンプルなインターフェイスがあります。Guiceで複数のパラメータを分岐させるクラスのファクトリを単純に処理する方法は?
public interface IDataSource<T> {
Observable<T> observable();
}
は今、私はそれの複数の実装を持つことになりますが。これらの実装のそれぞれは、さまざまなパラメータ(さまざまなストレージオブジェクト:JDBC、Cassandra、Redis ...)に依存する場合があります。たとえば、私は持っているでしょう:
public class CassandraDataSource implements IDataSource<MyCassandraObject> {
@Inject
public CassandraDataSource(Keyspace ks) {
// ...
}
}
public class OtherCassandraDataSource implements IDataSource<MyOtherCassandraObject> {
@Inject
public OtherCassandraDataSource(Keyspace ks) {
// ...
}
}
public class JDBCDataSource implements IDataSource<MyJdbcObject> {
@Inject
public JDBCDataSource(Database db) {
// ...
}
}
など。
私が望むのは、適切なIDataSource
を返すファクトリを呼び出せるように、それぞれの文字列を参照することです。そのように振る舞うと何か:
public class DataSourceFactory {
public static final Map<String, Supplier<IDataSource<?>>> map = new HashMap<>();
@SuppressWarnings("unchecked")
public <T> IDataSource<T> get(String ref) {
return (IDataSource<T>) map.get(ref).get();
}
}
私は私の工場にパラメータ(または直接フィールドインジェクション)としてN Providers
を与える(N Iが使用IDataSource
の数である)ことができ、マップストリングコンストラクタのものとかget
メソッドのスイッチを使用しますが、これは10から20に達すると非常に混乱します(以上)
私が見落としている簡単な解決策がありますか?あなたは工場を持っている必要がある場合
おかげ