- 복잡한 객체들을 단계별로 생성 할 수 있도록 하는 생성 디자인 패턴
- 점층적 생성자를 제거하기 위한 방법
예시
public class Sandwitch
{
private int cheeze;
private int tomato;
private int bread;
private int jalapeno;
public Sandwitch (int bread)
{
this.bread = bread;
}
public Sandwitch(int bread, int tomato)
{
this.bread = bread;
this.tomato=tomato;
}
}
윽 벌써 귀찮다. 이렇게 생성자를 한땀한땀 만드는 점층적 생성자를 만들어야 하는 상황이 올 수 있다.
아니면 bread는 됬고 tomato만 바꾸고 싶다면? 갈수록 태산이다. 아니면 한땀한땀 변수마다 setter를 만들어 줄 수도 있다.
하지만 무지성 setter는 public 변수랑 다를바가 무엇인가.
물론 이 귀찮은 상황을 간★편하게 해결할 수는 없지만 좀더 우아하게 해결 할 수 는 있다. 절대 쳐야할 코드가 획기적으로 줄진 않는다..
public class Sandwitch
{
private int cheeze;
private int tomato;
private int bread;
private int jalapeno;
public Sandwitch(int cheeze, int tomato, int bread, int jalapeno)
{
// 할당
}
}
public class SandwitchBuilder
{
private int cheeze;
private int tomato;
private int bread;
private int jalapeno;
public SandwitchBuilder Cheeze(int cheeze)
{
this.cheeze = cheeze;
return this;
}
public SandwitchBuilder Tomato(int tomato)
{
this.tomato = tomato;
return this;
}
pubilc SandwitchBuilder Bread(int bread)
{
this.bread = bread;
return this;
}
pubilc SandwitchBuilder Jalapeno(int jalapeno)
{
this.jalapeno = jalapeno;
return this;
}
public Sandwitich Build()
{
return new Sandwitch(cheeze, tomato, bread, jalapeno);
}
}
길기도 길다. 불-편 한 것 같지만 사용할 때를 보자.
Sandwitch noJalapeno = new SandwithBuilder()
.Cheeze(1)
.Tomato(3)
.Bread(2)
.Build();
코드의 복잡성은 조금 증가하지만, 복잡한 생성코드를 고립시킬 수 있다.
물론 한단계 거쳐서 객체를 생성하니 조금의 오버로드는 발생한다.
실제적용
'CS > DesignPattern' 카테고리의 다른 글
[DesignPattern] MVP 패턴 (0) | 2024.11.02 |
---|---|
[DesignPattern] MVC (0) | 2024.10.31 |
[DesignPattern] 타입객체 (0) | 2024.10.23 |
[DesignPattern] 이중버퍼 (0) | 2024.10.21 |
[DesignPattern] 프로토타입 패턴 (0) | 2024.10.14 |