2012-06-16 88 views
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; 
    } 
} 

如何正确使用谷歌吉斯这样做?我尝试了辅助注射,但我不确定我将如何创建“UrlBuilder”。谁能帮忙?

回答

0

我创建保存的URL设置类和这样做:

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()); 
    } 
} 

它有点儿工作,但我不知道我喜欢它。

0

Guice减轻了对工厂的需求,并在您的 Java代码中使用新的。

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

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

+0

工厂被注入Facade。我会编辑。 – kalithlev