2011-12-14 40 views
2

我有一个的请求创建网址如下函数返回值:模式来修改的方法

public String createUrl(String path, String filename) { 
     return new StringBuilder(path).append("?filename=").append(filename).toString(); 
     } 

现在,我想要做的就是添加一个参数叫的transactionId的URL。一个天真的实现将是:

public String createUrl(String path, String filename,String transactionId) { 
      return new StringBuilder(path).append("?filename=").append(filename).append("?transactionId=").append(transactionId).toString(); 
      } 

或者我可以有地方的静态方法返回一个TRANSACTIONID并修改代码如下:

public String createUrl(String path, String filename) { 
      return new StringBuilder(path).append("?filename=").append(filename).append("?transactionId=").append(TransactionMonitor.getTransactionId()).toString(); 
      } 

这两种方法让我修改既有代码。有没有一种方法可以用新参数修饰方法返回的url。另外,如果解决方案是可配置的,它将会很棒。

感谢

+0

我怎么看不到第二个方法使您可以修改原有的代码。方法签名保持不变。 – 2011-12-14 19:09:26

+0

签名保持不变,但我触摸了我希望尽可能避免的内部函数。 – 2011-12-14 19:15:03

回答

4

您可以创建UrlBuilder类,建立的网址给你:

class UrlBuilder { 

    private String path; 

    private Map<String, String> parameters = new LinkedHashMap<String, String>(); 

    public UrlBuilder path(String path) { 
     this.path = path; 
     return this; 
    } 

    public UrlBuilder parameter(String param, String value) { 
     parameters.add(param, value); 
     return this; 
    } 


    public String build() { 
     String paramsString = ""; 

     for (Map.Entry<String, String> entry: parameters.entrySet()) { 
      if (paramsString.isEmpty()) { 
       paramsString += "?"; 
      } 
      paramsString += params.getKey() + "=" + params.getValue(); 
     } 

     return path + paramsString; 
    } 

} 

,并用它在你的代码

new UrlBuilder().path("http://google.com").params("q", "java").build()