При создании классов для «неизменяемых объектов» подразумевается неизменное состояние экземпляров; все поля, назначенные в конструкторе) в 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? (примечание: НЕ то, что должно быть его именем - но как называется этот класс методов).
Технически это своего рода фабричный метод, но почему-то это не совсем подходит мне, поскольку часто фабрикам просто присваиваются базовые свойства (и они являются либо статическими методами, либо не являются членами типа результата, но типа фабрики).
Так что я предполагаю, что для таких методов должен быть лучший термин. Поскольку эти методы могут использоваться для реализации « Свободный интерфейс », может быть, они могут быть «Свободные фабричные методы»?
Лучшие предложения?
РЕДАКТИРОВАТЬ: как предлагает один из ответов, java.math.BigDecimal
является хорошим примером с его методами «сложение», «вычитание» (и т. Д.).
Также: я заметил, что есть этот вопрос (не менее Джоном Скитом), который как бы связан (хотя он спрашивает о конкретном имени для метода)
РЕДАКТИРОВАТЬ, МАЙ-2014: Мой текущий любимый mutant factory
, FWIW.