본문 바로가기
Spring/DesighPattern

GOF패턴-BuilderPattern-2(생성)

by windy7271 2023. 2. 23.
728x90
반응형

많은 변수를 가진 객체의 생성을 가독성 높게한다.

 

많은 인자를 가진 객체를 생성을 다른 객체의 도움으로 생성하는 패턴 > 보통 빌더패턴이 이것이다.

 

 

package Builder2;

public class Main {
    public static void main(String[] args) {

        Computer computer = ComputerBuilder
                .start()
                .setCpu("i7")
                .setRam("8g")
                .setStorage("128g ssd")
                .build();
        System.out.println("computer = " + computer.toString());
        System.out.println("computer = " + computer);
    }
}

 

 

 

 

package Builder2;

//디렉터
public class Computer { // 복잡한 단계 거처야하는 객체
    private String Cpu;
    private String ram;
    private String storage;

    /**
     *
     * @param cpu 씨피유
     * @param ram 램
     * @param storage 저장소
     */
    public Computer(String cpu, String ram, String storage) {
        this.Cpu = cpu;
        this.ram = ram;
        this.storage = storage;
    }

    public String getCpu() {
        return Cpu;
    }

    public void setCpu(String cpu) {
        Cpu = cpu;
    }

    public String getRam() {
        return ram;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }

    public String getStorage() {
        return storage;
    }

    public void setStorage(String storage) {
        this.storage = storage;
    }

    @Override // 객체가 가지고 있는 문자열을 반환
    public String toString() {
        return Cpu +","+ram+","+storage;
    }
}

 

package Builder2;

public class ComputerBuilder {
    private Computer computer;
    private ComputerBuilder() {
        computer = new Computer("default","default","default");
    }

    public static ComputerBuilder start() {
        return new ComputerBuilder(); // ssd는 default가 들어감
    }

    public ComputerBuilder setCpu(String string) {
        computer.setCpu(string);
        return this;
    }

    public ComputerBuilder setRam(String string) {
        computer.setRam(string);
        return this;
    }

    public ComputerBuilder setStorage(String storage) {
        computer.setStorage(storage);
        return this;
    }
    public Computer build() {
        return this.computer;
    }

//    public ComputerBuilder setStroage(String string) {
//        computer.setStorage(string);
//        return null;
//    }
}

 

 

리턴타입이 자기 자신인 이유는 그래야 리턴타입이 맞기 때문이다

ComputerBuilder로 cpu를 설정하고 다시 ComputerBuilder 로 리턴하면 

그다음 Ram 을 성정할때 다시 메소드를 쓸수 있게된다, 그러면서 체이닝을 계속 이어서 만들 수 있는 형태가 돼서 

결국 Build(); 가 나올때까지 계속 해주면 된다. >> 체이닝 원리 완성

반응형

댓글