[생성 패턴] Builder pattern (빌더 패턴)
제품을 여러 단계로 나눠서 만들 수 있도록 제품 생산 단계들을 캡슐화할 때
1. 불필요한 생성자를 만들지 않고 객체를 만든다.
2. 데이터의 순서에 상관 없이 객체를 만들어 낸다.
3. 사용자가 봤을때 명시적이고 이해할 수 있어야 한다.
public class PersonInfoBuilder {
private String name;
private Integer age;
private String favoriteColor;
private String favoriteAnimal;
private Integer favoriteNumber;
public PersonInfoBuilder setName(String name) {
this.name = name;
return this;
}
public PersonInfoBuilder setAge(Integer age) {
this.age = age;
return this;
}
public PersonInfoBuilder setFavoriteColor(String favoriteColor) {
this.favoriteColor = favoriteColor;
return this;
}
public PersonInfoBuilder setFavoriteAnimal(String favoriteAnimal) {
this.favoriteAnimal = favoriteAnimal;
return this;
}
public PersonInfoBuilder setFavoriteNumber(Integer favoriteNumber) {
this.favoriteNumber = favoriteNumber;
return this;
}
public PersonInfo build(){
PersonInfo personInfo = new PersonInfo(name, age, favoriteColor, favoriteAnimal, favoriteNumber);
return personInfo;
}
}
public class BuilderPattern {
public static void main(String[] args) {
// 빌더 객체를 하나 만듭니다.
PersonInfoBuilder personInfoBuilder = new PersonInfoBuilder();
// 빌더 객체에 원하는 데이터를 입력합니다. 순서는 상관 없습니다.
PersonInfo result = personInfoBuilder
.setName("MISTAKE")
.setAge(20)
.setFavoriteAnimal("cat")
.setFavoriteColor("black")
.setName("JDM") // 다시 같은 메소드를 호출한다면 나중에 호출한 값이 들어갑니다.
.setFavoriteNumber(7)
// 마지막에 .build() 메소드를 호출해서 최종적인 결과물을 만들어 반환합니다.
.build();
// print is "name:JDM, age:20, favoriteColor:black, favoriteAnimal:cat, favoriteNumber:7"
System.out.println(result.getPersonInfo());
}
}
'Development > Java' 카테고리의 다른 글
[구조 패턴] Flyweight pattern (플라이웨이트 패턴) (0) | 2017.03.26 |
---|---|
[행위 패턴] Chain of responsibility pattern (역할 사슬 패턴) (0) | 2017.03.26 |
[구조 패턴] Bridge pattern (브리지 패턴) (0) | 2017.03.26 |
[디자인 패턴] Compound pattern (컴파운드 패턴) (0) | 2017.03.26 |
[구조 패턴] Proxy pattern (프록시 패턴) (0) | 2017.03.26 |