빌더패턴(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());
}
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
디자인패턴 - 추상 팩토리 패턴 (0) | 2019.08.31 |
---|---|
디자인패턴 - 빌드패턴(2) (0) | 2019.08.30 |
디자인패턴-얕은복사&깊은복사 (0) | 2019.08.26 |
디자인패턴- 프로토타입 패턴 (0) | 2019.08.26 |
디자인패턴- 싱글톤 패턴 (0) | 2019.08.24 |