Adaptar el patrón Builder para la invocación de métodos.

Este es un bash de comprender una parte del ARTÍCULO 40: firmas de métodos de diseño cuidadosamente desde la segunda edición de Java 2.

Una de las cosas sugeridas para mejorar la legibilidad de la firma del método es apuntar a cuatro o menos parámetros. Se sugiere que las listas de parámetros más largas se manejen utilizando una variedad de técnicas, una de las cuales es la siguiente:

Una tercera técnica que combina aspectos de los dos primeros es adaptar el patrón del Generador (Elemento 2) de la construcción del objeto a la invocación del método. Si tiene un método con muchos parámetros, especialmente si algunos de ellos son opcionales, puede ser beneficioso definir un objeto que represente a todos los parámetros y permitir que el cliente realice múltiples llamadas de “establecimiento” en este objeto, cada uno de ellos que establece un solo parámetro o un pequeño grupo relacionado. Una vez que se han establecido los parámetros deseados, el cliente invoca el método de “ejecución” del objeto, que realiza las verificaciones finales de validez de los parámetros y realiza el cálculo real.

Estoy familiarizado con el patrón Builder, ya que se utiliza para la construcción de objetos, pero no estoy seguro de haber entendido correctamente cómo adaptarlo a la invocación de métodos.

Aquí está lo que tengo hasta ahora:
(He intentado mejorar la invocación del método para el método de 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(); } } 

¿Es correcta mi interpretación del consejo de Joshua Bloch?