Адаптация шаблона Builder для вызова метода

Это попытка понять частьПУНКТ 40: Тщательно подписывать метод проектирования из эффективной Java 2-е издание.

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

Третий метод, который объединяет аспекты первых двух, заключается в адаптации шаблона Builder (элемент 2) от конструирования объекта к вызову метода. Если у вас есть метод с множеством параметров, особенно если некоторые из них являются необязательными, может быть полезно определить объект, который представляет все параметры, и позволить клиенту создать несколько «сеттер" вызывает этот объект, каждый из которых устанавливает один параметр или небольшую связанную группу. Как только желаемые параметры были установлены, клиент вызываетвыполнить» метод, который выполняет окончательную проверку достоверности параметров и выполняет фактические вычисления.

Я знаком с шаблоном Builder, так как он используется для построения объектов, но не уверен, правильно ли я понял, как адаптировать его к вызову метода.

Вот что я имею до сих пор:

(Я попытался улучшить вызов метода дляmove метод)

public class Space {

    public static class Builder {
        // Required parameters
        private final int x;
        private final int y;
        private final int z;

        // optional params
        private long time = 0;

        public Builder(int x, int y, int z) {
            this.x = x;
            this.y = y;
            this.z = z;
        }

        public Builder time(long val) {
            time = val;
            return this;
        }

        public void move() {
            if (x == 0 || y == 0 || z == 0) {
                throw new IllegalArgumentException("Cannot move to the centre of the universe");
            }

            // Do the actual work here
        }
    }

//  public void move(int x, int y, int z, long time) {
//      // Do the work here
//  }

    public static void main(String[] args) {
        new Builder(1, 1, -1).time(1234).move();
    }
}

Это моя интерпретация Джошуа Блоха?совет правильный?

Ответы на вопрос(3)

Ваш ответ на вопрос