CS/DesignPattern

[DesignPattern] BuilderPattern

리네엔 2024. 10. 25. 22:32
  • 복잡한 객체들을 단계별로 생성 할 수 있도록 하는 생성 디자인 패턴
  • 점층적 생성자를 제거하기 위한 방법

예시

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();

코드의 복잡성은 조금 증가하지만, 복잡한 생성코드를 고립시킬 수 있다.
물론 한단계 거쳐서 객체를 생성하니 조금의 오버로드는 발생한다.

실제적용

적용1

'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