본문 바로가기
Spring/DesighPattern

GOF패턴-BuilderPattern-1(생성)

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

복잡한 단계가 필요한 인스턴스생성 을 빌더 패턴을 통해서 구현 

 

복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브클래스에게 넘겨주는패턴이다 >> 템플릿메소드랑 비슷한느낌이다

 

 

 

팩토리가 있고 / 설계도를 넘겨주고 / 만들어준다음/ 설계도대로 만들어줌

factory == Director

Blueprint(설계도) AbstractBuilder

LgGramBlueprint > ConcreateBulder

 

메인

package Builder1;

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

        ComputerFactory factory = new ComputerFactory();// 생성을 다른 객체에 넘김

        factory.setBlueprint(new LgGramBlueprint()); // 설계도를 넣어서
//        factory.setBlueprint(new MacAirBlueprint());
//        factory.setBlueprint(new SonyBlueprint());
//        Computer computer = factory.makeAndGet();

        factory.make(); // 만들어줌

        Computer computer = factory.getComputer(); //  설계도대로 만들어준거 가져와서

//        Computer computer = new Computer("17", "16giga", "256g ssd"); 

        System.out.println(computer.toString()); //출력
    }
}


// factory 가 Director
// Blueprint 는 설계도 >> AbstractBuilder
// LgGramBlueprint 가 ConcreateBuilder

 

컴퓨터 Director

package Builder1;

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

    public Computer(String cpu, String ram, String storage) {
        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 Builder1;

public class ComputerFactory {
    private BluePrint print;
    public void setBlueprint(BluePrint print) {
        this.print = print;
    }
    //설계도를 하나 가져있고


    // 만든다음에
    public void make()
    {
        print.setCpu();
        print.setRam();
        print.setStorage();
    }

    // 만들어진 거를 가지고 옴
    public Computer getComputer() {
        return print.getComputer();
    }
}

 

설계도

package Builder1;

public class LgGramBlueprint extends BluePrint{

    private Computer computer;

    public LgGramBlueprint() {
        computer = new Computer("default","default","default");
    }
    @Override
    public void setCpu() {
        computer.setCpu("i7");
    }

    @Override
    public void setRam() {
        computer.setRam("8g");
    }

    @Override
    public void setStorage() {
        computer.setStorage("256g ssd");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}

w

장점 :

  1. 필요한 데이터만 설정할 수 있음
  2. 유연성을 확보할 수 있음
  3. 가독성을 높일 수 있음
  4. 변경 가능성을 최소화할 수 있음
반응형

댓글