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
장점 :
- 필요한 데이터만 설정할 수 있음
- 유연성을 확보할 수 있음
- 가독성을 높일 수 있음
- 변경 가능성을 최소화할 수 있음
반응형
댓글