Как реализовать проверенный шаблон компоновщика в Java - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь реализовать проверенный шаблон построителя, подобный тому, как он описан в этом: https://dev.to/schreiber_chris/creating-complex-objects-using-checked-builder-pattern

Результат, которого я пытаюсь достичь, выглядит следующим образом:

Builder builder = new Builder('TestVal')
    .when('this').then(new Set<String> {'val1','val2'})
    .when('that').then(new Set<String> {'val3','val4'});

И результирующий объект будет содержать коллекцию с любым числом whens с ассоциированным thens, например, такой картой (параметр для when() уникален):

'this' => ['val1','val2'],
'that' => ['val3','val4']

Я борюсь с парой вещей:

  1. Как связать значения, переданные в then(), со значением, переданным в when()
  2. Как требуют, чтобы then() вызывался после when(). (например - .when('this').when('that') //invalid

1 Ответ

3 голосов
/ 29 апреля 2020

Самый простой способ - использовать несколько интерфейсов для обеспечения порядка вызовов, а затем использовать эти знания для сопоставления ваших элементов. Например, что-то вроде этого:

interface Then{
    When then(Set<String> values);
}

interface When{
    Then when(String condition);
}

class Builder implements When, Then{

    public static When create(){ return new Builder(); }

    private Map<String, Set<String>> storedMappings = new HashMap<>();
    private String currentCondition;

    private Builder(){ }

    public Then when(String condition){
        currentCondition = condition;
        return this;
    }

    public When then(Set<String> values){
        storedMappings.put(currentCondition, values);
        return this;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...