본문으로 바로가기

디자인패턴 - 빌더패턴(1)

category 프로그래밍 언어/Java 2019. 8. 30. 23:21

빌더패턴(1)

복잡한 단계가 있는 인스턴스 생성과정을 단순화하는 패턴입니다.

즉 복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브 클래스에게 넘겨주는 패턴입니다.

즉 빌더가 설계서인 BluePrint이고 이를 구체화한 LG 그램을 만드는 LgGramBluePrint가 있고, Director는 컴퓨터 공장이라고 불리는 ComputerFactory입니다. 즉 복잡한 단계를 BluePrint라는 서브클래스로 넘겨서 컴퓨터를 만드는 빌더 패턴입니다.

우선 Computer는

package com.jeongchan.builder2;

/**
 * 컴퓨터 클래스
 * @author dlwjd
 *
 */

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) {
		super();
		this.cpu = cpu;
		this.ram = ram;
		this.storage = storage;
	}
	public String getCpu() {
		return cpu;
	}
	public void setCpu(String cpu) {
		this.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 "Computer [cpu=" + cpu + ", ram=" + ram + ", storage=" + storage + "]";
	}
	
	
}

이제 설계서인 BluePrint 인터페이스를 만듭시다.

package com.jeongchan.builder1;

import com.jeongchan.builder2.Computer;

/*
 * 설계서
 */
public abstract class BluePrint {
	abstract public void setCpu();
	abstract public void setRam();
	abstract public void setStorage();
	protected abstract Computer getComputer();
}

이를 상속받아 구현하는 LgGramBluePrint를 만듭시다.

package com.jeongchan.builder1;

import com.jeongchan.builder2.Computer;

/**
 * 설계서를 상속받은 LG그램 설계도
 * @author dlwjd
 *
 */
public class LgGramBlueprint extends BluePrint {
	
	private Computer computer;
	
	public LgGramBlueprint() {
		computer = new Computer("default","default","default");
	}
	@Override
	public void setCpu() {
		// TODO Auto-generated method stub
		computer.setCpu("i7");
	}

	@Override
	public void setRam() {
		// TODO Auto-generated method stub
		computer.setRam("16g");
	}

	@Override
	public void setStorage() {
		// TODO Auto-generated method stub
		computer.setStorage("256g ssd");
	}
	@Override
	protected Computer getComputer() {
		// TODO Auto-generated method stub
		return computer;
	}

}

이제 빌드패턴을 위해서 컴퓨터 공장을 만듭시다. 여기서 위 만든 설계서를 통해 작성합니다.

 

package com.jeongchan.builder1;

import com.jeongchan.builder2.Computer;

/**
 * 빌드 패턴을 위한 컴퓨터 공장으로 설계도를 가지고 컴퓨터를 만들어서 반환
 * @author dlwjd
 *
 */
public class ComputerFactory {
	
	private BluePrint bluePrint;
	
	public void setBluePrint(BluePrint bluePrint) {
		// TODO Auto-generated method stub
		this.bluePrint = bluePrint;
	}

	public void make() {
		// TODO Auto-generated method stub
		bluePrint.setCpu();
		bluePrint.setRam();
		bluePrint.setStorage();
	}

	public Computer getComputer() {
		// TODO Auto-generated method stub
		return bluePrint.getComputer();
	}

}

이를 메인에서 사용합시다.

package com.jeongchan.builder1;

import com.jeongchan.builder2.Computer;

/**
 * 빌더 패턴
 * @author dlwjd
 *
 */
public class Main {
	public static void main(String[] args) {
		
		ComputerFactory factory = new ComputerFactory();
		
		factory.setBluePrint(new LgGramBlueprint());
		factory.make();
		
		Computer computer1 = factory.getComputer();
		
		System.out.println(computer1.toString());
	}
}