2016-09-07 9 views
5

Builder Pattern을 사용하는 경우 왜 객체 구성에 액세스하기 위해 빌더 객체를 재사용하면 안됩니까? 예를 들어 :빌더 패턴을 사용할 때 빌더 오브젝트를 다시 사용하여 오브젝트 구성에 액세스하면 안됩니까?

정상적인 방법 :

ObjectA(ObjectBuilder b) { 
    this.a = b.getA(); 
} 
public Object getA(){ 
    return this.a; 
} 

그런데 왜 난 그냥이 사용할 수 없습니다

ObjectA(ObjectBuilder b) { 
    this.builder = b; 
} 
public Object getA(){ 
    return this.builder.getA(); 
} 

감사합니다 :)

+6

빌더 사용에 관한 요점은 변경 불가능한 객체를 빌드하는 것입니다. 빌더는 변경 가능하며, 빌드 할 수없는 것은 아닙니다. 빌더에 위임 한 경우 인스턴스가 다시 변경 가능합니다. 'ObjectBuilder'의 동일한 인스턴스에 대한 참조가있는 사용자는 누구나 'ObjectA'를 변경할 수 있습니다. 가변 객체를 원한다면 빌더를 사용할 필요가 없습니다. 단지'ObjectA'에 세터 만 있으면됩니다. –

+0

꽤 좋은 답변입니다. A가 생성자 다음에 변경되는 것을 원하지 않는다는 것은 사실입니다. 그래서 처음부터 빌더를 사용했습니다. –

답변

7

빌더를 사용하는 큰 이유입니다 불변 객체를 빌드하는 것 : 빌더는 변경 가능하고, 빌드하는 것은 반드시 (꼭) 필요하지는 않습니다.

빌더에 위임 한 경우 인스턴스가 다시 변경 될 수 있습니다. ObjectBuilder의 동일한 인스턴스에 대한 참조가있는 사용자는 ObjectA을 변경할 수 있습니다. 즉, 건설 시간에 ObjectA 상태의 유효성에 대해 수행하는 모든 검사를 무효화 할 수 있습니다.

변경 가능한 개체가 필요한 경우 작성자가 필요하지 않습니다. ObjectA에 설정 도구가 있습니다.

+2

변경 가능한 객체를 원한다면 빌더가 필요하지 않습니다. 건축업자는 단순한 불변성 이상의 것이 좋습니다. – jaco0646

+0

@AndyTurner 나는 빌더 패턴 [여기] (http://stackoverflow.com/questions/41206286/how-to-clone-old-builder-to-make-a-new-builder-object)에 비슷한 질문을합니다. 당신이 저를 도와 줄 수 있는지 알고 싶습니다. –