빌더 패턴 (주로 Java)의 많은 구현을 보았습니다. 그들 모두는 엔티티 클래스 (클래스라고합시다 Person
)와 빌더 클래스를 가지고 PersonBuilder
있습니다. 빌더는 다양한 필드를 "스택" new Person
하고 인수가 전달 된 a 를 리턴합니다 . 모든 빌더 메소드를 Person
클래스 자체 에 넣는 대신 명시 적으로 빌더 클래스가 필요한 이유는 무엇 입니까?
예를 들면 다음과 같습니다.
class Person {
private String name;
private Integer age;
public Person() {
}
Person withName(String name) {
this.name = name;
return this;
}
Person withAge(int age) {
this.age = age;
return this;
}
}
간단히 말해 Person john = new Person().withName("John");
PersonBuilder
수업이 왜 필요한 가요?
내가 볼 수있는 유일한 이점은 Person
필드를로 선언하여 final
불변성을 보장 한다는 것 입니다.
withName
이름 필드 만 변경된 사람의 사본을 반환 할 수 있습니다 . 다시 말해, 불변 인 Person john = new Person().withName("John");
경우에도 작동 할 수 있습니다 Person
(그리고 이것은 함수형 프로그래밍에서 일반적인 패턴입니다).
void
. 메소드가 필요 없습니다. 예를 들어, Person
이름을 인쇄하는 메소드가있는 경우 에도 Fluent Interface로 체인을 연결할 수 있습니다 person.setName("Alice").sayName().setName("Bob").sayName()
. 그건 그렇고, 나는 JavaDoc에있는 사람들에게 정확하게 당신의 제안으로 주석을 달았 습니다. 실행이 끝날 @return Fluent interface
때 수행되는 메소드에 적용 할 때 일반적이고 명확 return this
하며 상당히 분명합니다. 따라서 빌더는 유창한 인터페이스를 수행합니다.
chainable setters
다음과 같습니다. D