以下是我写的工厂模式。但是,为了将其更改为 Provider,Guice documentation不太有帮助。
class ClientA extends AbstractClient {...}
class ClientB extends AbstractClient {...}
class ClientUtil {
private static AbstractClient client;
public static AbstractClient getClient(String key) {
ClientType clientType = ....
switch(clientType) {
case ".." : client = new ClientA.Builder()....build();
break;
case "..." :
default : client= new ClientB.Builder()....build();
}
return client;
}
}
class Application {
AbstractClient client = ClientUtil.getClient(key); // here, key is a string which is dynamic
}
请提供一些关于如何使用 Guice AssistedInject 将其编写为 Provider 格式的建议。
最佳答案
您是否尝试手动编写工厂?您链接的手册有一个很好的示例,您的代码可以轻松翻译为 Guice。
public interface ClientFactory {
AbstractClient create(String key);
}
public class ClientFactoryImpl implements ClientFactory {
@Override
public AbstractClient create(String key) {
if ("A".equals(key)) {
return new ClientA();
} else {
return new ClientB();
}
}
}
并将工厂绑定(bind)到实现
bind(ClientFactory.class).to(ClientFactoryImpl.class);
AssistedInject 对您的情况不利。它提供的只是自动构建 ClientFactoryImpl。该实现仅将注入(inject)和辅助参数传递给构造函数。但是 create 方法中有一些不平凡的逻辑。在这种情况下,我建议您自己创建工厂实现。
关于java - 如何使用Guice Assisted Inject来实现这个工厂模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56028376/