「불변 오브젝트」의 클래스를 작성할 경우, 인스턴스의 상태를 변경할 수 없다는 것을 의미합니다. 생성자에 할당 된 모든 필드)를 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"방법은 무엇이라고해야 하는가? (참고 : 그 이름이 무엇이되어야하는지는 모르지만 -이 클래스의 메소드는 무엇이라고 불리는가). 기술적으로는 일종의 팩토리 메서드입니다. 그러나 어쨌든 공장은 기본 속성 만 제공되기 때문에 (정적 메서드이거나 결과 형식이지만 팩토리 형식의 멤버가 아니기 때문에) 나에게 맞지 않는 것처럼 보입니다.
그래서 나는 그러한 방법에 대해 더 나은 용어가 있어야한다고 생각합니다. 이 메소드는 "fluent interface"을 구현하는 데 사용할 수 있으므로 "유창한 팩토리 메소드"일 수 있습니까? 더 나은 제안이 있으십니까?
편집 : 답변 중 하나가 제안한대로 java.math.BigDecimal
은 '추가', '빼기'등의 좋은 예입니다.
는 또한 : 나는
편집 (이 방법에 대한 구체적인 이름을 묻는 있지만) 종류의 관련입니다 (더 적은 존 소총에 의해) this question가 있다는 것을 눈치, 월 - 2014 년 : 나의 현재 좋아하는 mutant factory
, FWIW입니다 .
나는 그것을 부적절하게 명명 된 방법이라고 부릅니다. – Falmarri
"move"와 "delta"는 기존 인스턴스의 속성의 변경 가능성을 암시합니다 ... – BoltClock
실제 질문을 읽으십시오 - 메소드의 이름을 지정하는 방법을 묻지는 않았지만 메소드의 종류를 무엇이라고 부릅니다. 그러나 다른 사람들이 옆으로 넘어지지 않도록 코드를 약간 편집 할 것입니다. – StaxMan