Al crear clases para "objetos inmutables" inmutables, lo que significa que el estado de las instancias no se puede cambiar; todos los campos asignados en el constructor) en Java (e idiomas similares), a veces es útil permitir la creación de instancias modificadas. Es decir, usar una instancia como base y crear una nueva instancia que difiera en un solo valor de propiedad; otros valores que provienen de la instancia base. Para dar un ejemplo sencillo, se podría tener clase como:Cómo llamar a los métodos de fábrica (java) utilizados con objetos inmutables
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);
}
}
Por lo tanto: lo que debe ser llamado método de "withOffset"? (nota: NO cuál debería ser su nombre, pero a qué se llama esta clase de métodos). Técnicamente es una especie de método de fábrica, pero de alguna manera eso no me parece correcto, ya que a menudo las fábricas solo tienen propiedades básicas (y son métodos estáticos, o no son miembros del tipo de resultado sino de fábrica).
Así que supongo que debería haber un término mejor para tales métodos. Dado que estos métodos se pueden usar para implementar "fluent interface", ¿podrían ser "métodos de fábrica fluidos"? ¿Mejores sugerencias?
EDITAR: como se sugiere en una de las respuestas, java.math.BigDecimal
es un buen ejemplo con sus métodos 'agregar', 'restar' (etc.).
también: me di cuenta de que hay this question (por Jon Skeet nada menos) que es una especie de relacionado (aunque pide nombre acerca específica para el método)
EDITAR, MAYO-2014: Mi favorito actual es mutant factory
, Fwiw .
Lo llamaría un método mal llamado. – Falmarri
"mover" y "delta" implican mutabilidad de las propiedades de una instancia existente ... – BoltClock
Lea la pregunta real: NO pregunté cómo nombrar los métodos, sino cómo denominarlos. Pero solo para evitar que otros tropiecen con líneas laterales, editaré el código un poco. – StaxMan