Шаблоны для изменения значения, возвращаемого методом - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть функция, которая создает URL для запросов следующим образом:

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

Теперь я хочу добавить еще один параметр в URL с именемactionId. Наивной реализацией будет:

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

или у меня может быть где-то статический метод, который возвращает идентификатор транзакции и изменяет код следующим образом:

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

Оба эти подхода заставляют меня изменить существующий код. Есть ли подход, который я могу использовать, чтобы украсить URL-адрес, возвращаемый методом, с новыми параметрами. Кроме того, было бы здорово, если бы решение было настраиваемым.

Спасибо

1 Ответ

4 голосов
/ 14 декабря 2011

Вы можете создать класс UrlBuilder, который создаст для вас URL:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...