0

我有一个看起来像这样的工厂:

public class Factory {

    public Client createClient(String url) {
        UrlBuilder urlBuilder = new UrlBuilder(url);

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpProcessor processor = new CompressionHttpProcessor();
        httpClient.addRequestInterceptor(processor);
        httpClient.addResponseInterceptor(processor);

        return new Client(httpClient, urlBuilder);
    }
}

像这样的一个类:

public class Facade {

    private Factory factory;
    private String url;

    public Facade(Factory factory) {
        this.factory = factory;
    }

    public void doStuff() {
        Client client = factory.createClient(url);
        // do stuff with client
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

我如何正确使用 Google Guice 来做同样的事情?我尝试了辅助注射,但我不确定如何创建“UrlBuilder”。任何人都可以帮忙吗?

4

2 回答 2

0

Guice 减少了 Java 代码中对工厂的需求和 new 的使用。

您的factory代码似乎违反了该原则。

您可能需要重新设计外观,以便它client通过注入(使用 setClient)方法接收对象。

于 2012-06-16T16:59:37.373 回答
0

我创建了一个包含 URL 的 Setting 类并执行了以下操作:

public MyModule extends AbstractModule {
    private final Settings settings;
    public MyModule(Settings settings) {
        this.settings = settings;
    }

    // configure

    @Provides
    private UrlBuilder createUrlBuilder(Settings settings) {
        return new UrlBuilder(settings.getUrl());
    }
}

它有点工作,但我不确定我是否喜欢它。

于 2012-06-16T20:16:50.590 回答