java - 如何使用Guice Assisted Inject来实现这个工厂模式?

标签 java guice

以下是我写的工厂模式。但是,为了将其更改为 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/

相关文章:

java - 无法在我的 java 示例中加载照片

java - 从 DI 框架中的 "god"对象中提取依赖项

java - 如何使用 Guice 设置同一个对象图的多个配置?

java - Guice - 使用两种不同的实现注入(inject)对象

javascript - 如果它调用 Selenium 中的 java 脚本函数,我如何从 Web 元素获取文件 URL

java - 如何删除 SWT 按钮的边框,使其看起来像一个标签

java - 如何发现对象是否包含设置为 0 的数字字段?

java - 找不到符号 AudioSynthesizer deeplearning4j 示例

guice - guice中的模块层次结构

java - 使用 Guice,如何注入(inject)父类(super class)的构造函数参数?