Как вызывать фабричные (java) методы, используемые с неизменяемыми объектами

При создании классов для «неизменяемых объектов» неизменяемый означает, что состояние экземпляров не может быть изменено; все поля, назначенные в конструкторе) в Java (и подобных языках), иногда полезно разрешить создание измененных экземпляров. То есть использование экземпляра в качестве основы и создание нового экземпляра, который отличается только одним значением свойства; другие значения поступают из базового экземпляра. Чтобы дать простой пример, можно иметь такой класс:

public class Circle {
  final double x, y; // location
  final double radius;

  public Circle(double x, double y, double r) {
    this.x = x;
    this.y = y;
    this.r = r;
  }

  // method for creating a new instance, moved in x-axis by specified amount
  public Circle withOffset(double deltaX) {
    return new Circle(x+deltaX, y, radius);
  }
}

Итак: какой должен быть вызван метод withOffset? (примечание: НЕ то, как должно быть его имя, а как называется этот класс методов). Чтобы дать простой пример, можно иметь такой класс:

public class Circle {
  final double x, y; // location
  final double radius;

  public Circle(double x, double y, double r) {
    this.x = x;
    this.y = y;
    this.r = r;
  }

  // method for creating a new instance, moved in x-axis by specified amount
  public Circle withOffset(double deltaX) {
    return new Circle(x+deltaX, y, radius);
  }
}

Итак: какой должен быть вызван метод withOffset? (примечание: НЕ то, как должно быть его имя, а как называется этот класс методов). Чтобы дать простой пример, можно иметь такой класс:

public class Circle {
  final double x, y; // location
  final double radius;

  public Circle(double x, double y, double r) {
    this.x = x;
    this.y = y;
    this.r = r;
  }

  // method for creating a new instance, moved in x-axis by specified amount
  public Circle withOffset(double deltaX) {
    return new Circle(x+deltaX, y, radius);
  }
}

Итак: какой должен быть вызван метод withOffset? (примечание: НЕ то, что должно быть, а как называется этот класс методов). Технически это своего рода фабричный метод, но почему-то мне это кажется не совсем правильным, поскольку часто фабрикам присваиваются просто базовые свойства (и они являются либо статическими методами, либо не являются членами типа результата, а типа фабрики).

Так что я полагаю, что для таких методов должен быть лучший термин. Поскольку эти методы могут использоваться для реализации « fluent interface », возможно, они могут быть «свободными заводскими методами»? Лучшие предложения?

РЕДАКТИРОВАТЬ: как было предложено в одном из ответов, java.math.BigDecimal является хорошим примером с его методами 'add', 'subtract' (и т. Д.).

Также: I заметил, что есть этот вопрос (не менее Джона Скита), который является своего рода связанным (хотя он спрашивает о конкретном названии метода)

РЕДАКТИРОВАТЬ, МАЙ-2014: Мой текущий фаворит - мутант завод , FWIW.

5
задан Community 23 May 2017 в 12:22
поделиться